use std::net::SocketAddr;
use announce::{AnnounceRequest, AnnounceResponse};
use scrape::{ScrapeRequest, ScrapeResponse};
pub type ServerResult<'a, T> = Result<T, &'a str>;
pub trait ServerHandler: Send {
fn connect<R>(&mut self, addr: SocketAddr, result: R)
where R: for<'a> FnOnce(ServerResult<'a, u64>);
fn announce<'b, R>(&mut self,
addr: SocketAddr,
id: u64,
req: &AnnounceRequest<'b>,
result: R)
where R: for<'a> FnOnce(ServerResult<'a, AnnounceResponse<'a>>);
fn scrape<'b, R>(&mut self, addr: SocketAddr, id: u64, req: &ScrapeRequest<'b>, result: R)
where R: for<'a> FnOnce(ServerResult<'a, ScrapeResponse<'a>>);
}