use agent::Request; use agent::Stream; use error::Error; use header::Header; use std::collections::HashMap; use std::io::Write; use std::sync::{Arc, Mutex}; use url::Url; use util::vecread::VecRead; mod agent_test; mod auth; mod body_read; mod simple; type RequestHandler = Fn(&Request, &Url) -> Result + Send + 'static; lazy_static! { pub static ref TEST_HANDLERS: Arc>>> = { Arc::new(Mutex::new(HashMap::new())) }; } pub fn set_handler(path: &str, handler: H) where H: Fn(&Request, &Url) -> Result + Send + 'static, { let mut handlers = TEST_HANDLERS.lock().unwrap(); handlers.insert(path.to_string(), Box::new(handler)); } pub fn make_response( status: u16, status_text: &str, headers: Vec<&str>, mut body: Vec, ) -> Result { let mut buf: Vec = vec![]; write!(&mut buf, "HTTP/1.1 {} {}\r\n", status, status_text).ok(); for hstr in headers.iter() { let header = hstr.parse::
().unwrap(); write!(&mut buf, "{}: {}\r\n", header.name(), header.value()).ok(); } write!(&mut buf, "\r\n").ok(); buf.append(&mut body); let read = VecRead::from_vec(buf); let write: Vec = vec![]; Ok(Stream::Test(Box::new(read), write)) } pub fn resolve_handler(req: &Request, url: &Url) -> Result { let mut handlers = TEST_HANDLERS.lock().unwrap(); let path = url.path(); let handler = handlers.remove(path).unwrap(); handler(req, url) }