use std::collections::HashMap;
pub use bytes::Bytes;
mod bytes;
pub trait Request {
fn source_addr(&self) -> Bytes;
fn version(&self) -> Bytes;
fn method(&self) -> Bytes;
fn set_method(&self, method: &[u8]);
fn uri(&self) -> Bytes;
fn set_uri(&self, uri: &[u8]);
fn header(&self) -> &dyn Header;
fn body(&self) -> &dyn Body;
}
pub trait Response {
fn status(&self) -> i32;
fn set_status(&self, code: i32);
fn header(&self) -> &dyn Header;
fn body(&self) -> &dyn Body;
}
pub trait Header {
fn names(&self) -> Vec<Bytes>;
fn values(&self, name: &[u8]) -> Vec<Bytes>;
fn set(&self, name: &[u8], value: &[u8]);
fn add(&self, name: &[u8], value: &[u8]);
fn remove(&self, name: &[u8]);
fn get(&self) -> HashMap<Bytes, Vec<Bytes>>;
}
pub trait Body {
fn read(&self) -> Bytes;
fn write(&self, body: &[u8]);
}