async-dnssd 0.3.0

Asynchronous wrapper for DNS-SD C libraries
Documentation
use futures::{Async};
use mio;
use std::io;
use std::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)
	}
}