async-dnssd 0.4.0

Asynchronous wrapper for DNS-SD C libraries
Documentation
use futures::Async;
use mio;
use std::{
	io,
	os::raw::c_int,
};
use tokio_core::reactor::{
	Handle,
	PollEvented,
	Remote,
};

use remote::GetRemote;

pub struct PollReadFd(PollEvented<EventedFd>);

impl PollReadFd {
	pub fn new(fd: c_int, handle: &Handle) -> io::Result<Self> {
		Ok(PollReadFd(PollEvented::new(EventedFd(fd), handle)?))
	}

	pub fn poll_read(&self) -> Async<()> {
		self.0.poll_read()
	}

	pub fn need_read(&self) {
		self.0.need_read()
	}
}

impl GetRemote for PollReadFd {
	fn remote(&self) -> &Remote {
		self.0.remote()
	}
}

struct EventedFd(c_int);

impl mio::Evented for EventedFd {
	fn register(
		&self,
		poll: &mio::Poll,
		token: mio::Token,
		interest: mio::Ready,
		opts: mio::PollOpt,
	) -> io::Result<()> {
		let efd = mio::unix::EventedFd(&self.0);
		mio::Evented::register(&efd, poll, token, interest, opts)
	}

	fn reregister(
		&self,
		poll: &mio::Poll,
		token: mio::Token,
		interest: mio::Ready,
		opts: mio::PollOpt,
	) -> io::Result<()> {
		let efd = mio::unix::EventedFd(&self.0);
		mio::Evented::reregister(&efd, poll, token, interest, opts)
	}

	fn deregister(&self, poll: &mio::Poll) -> io::Result<()> {
		let efd = mio::unix::EventedFd(&self.0);
		mio::Evented::deregister(&efd, poll)
	}
}