use std::io;
use std::sync::Arc;
use std::marker::PhantomData;
use {IoService, Handler};
pub struct ArcHandler<T, F, R> {
owner: Arc<T>,
handler: F,
marker: PhantomData<R>,
}
impl<T, F, R> Handler<R> for ArcHandler<T, F, R>
where T: Send + Sync + 'static,
F: FnOnce(Arc<T>, io::Result<R>, &IoService) + Send + 'static,
R: Send + 'static,
{
fn callback(self, io: &IoService, res: io::Result<R>) {
let ArcHandler { owner, handler, marker:_ } = self;
handler(owner, res, io)
}
}
pub fn bind<T, F, R>(handler: F, owner: &Arc<T>) -> ArcHandler<T, F, R> {
ArcHandler {
owner: owner.clone(),
handler: handler,
marker: PhantomData,
}
}