module notify

import time

// Backends should provide a `new()?FdNotifier` function
pub interface FdNotifier {
mut:
	add(fd int, events FdEventType, conf ...FdConfigFlags) !
	modify(fd int, events FdEventType, conf ...FdConfigFlags) !
	remove(fd int) !
	wait(timeout time.Duration) []FdEvent
	close() !
}

pub interface FdEvent {
	fd   int
	kind FdEventType
}

@[flag]
pub enum FdEventType {
	read
	write
	peer_hangup
	exception
	error
	hangup
}

@[flag]
pub enum FdConfigFlags {
	edge_trigger
	one_shot
	wake_up
	exclusive
}
