c_ares/
events.rs

1use crate::types::Socket;
2use bitflags::bitflags;
3
4bitflags!(
5    /// Events used by FdEvents.
6    #[derive(Copy, Clone, Eq, PartialEq, Debug, Hash, PartialOrd, Ord)]
7    pub struct FdEventFlags: u32 {
8        /// Read event (including disconnect/error).
9        const Read = c_ares_sys::ares_fd_eventflag_t::ARES_FD_EVENT_READ as u32;
10        /// Write event.
11        const Write = c_ares_sys::ares_fd_eventflag_t::ARES_FD_EVENT_WRITE as u32;
12    }
13);
14
15bitflags!(
16    /// Flags used by [`crate::Channel::process_fds()`].
17    #[derive(Copy, Clone, Eq, PartialEq, Debug, Hash, PartialOrd, Ord)]
18    pub struct ProcessFlags: u32 {
19        /// Skip any processing unrelated to the file descriptor events passed in.
20        const SkipNonFd = c_ares_sys::ares_process_flag_t::ARES_PROCESS_FLAG_SKIP_NON_FD as u32;
21    }
22);
23
24/// Type holding a file descriptor and mask of events, used by [`crate::Channel::process_fds()`].
25#[repr(transparent)]
26pub struct FdEvents(c_ares_sys::ares_fd_events_t);
27
28impl FdEvents {
29    /// Returns a new `FdEvents`.
30    pub fn new(socket: Socket, events: FdEventFlags) -> Self {
31        let events = c_ares_sys::ares_fd_events_t {
32            fd: socket,
33            events: events.bits(),
34        };
35        FdEvents(events)
36    }
37}