use super::{Headers, Method, Version};
#[derive(Debug, Clone)]
pub struct Request {
method: Method,
target: String,
version: Version,
headers: Headers,
body: Vec<u8>,
}
impl Request {
pub(crate) fn new(
method: Method,
target: String,
version: Version,
headers: Headers,
body: Vec<u8>,
) -> Request {
Request {
method,
target,
version,
headers,
body,
}
}
pub fn method(&self) -> &Method {
&self.method
}
pub fn target(&self) -> &str {
&self.target
}
pub fn path(&self) -> &str {
match self.target.split_once('?') {
Some((path, _)) => path,
None => &self.target,
}
}
pub fn query(&self) -> Option<&str> {
self.target.split_once('?').map(|(_, q)| q)
}
pub fn version(&self) -> Version {
self.version
}
pub fn headers(&self) -> &Headers {
&self.headers
}
pub fn host(&self) -> Option<&str> {
self.headers.get("host")
}
pub fn body(&self) -> &[u8] {
&self.body
}
pub fn body_str(&self) -> std::borrow::Cow<'_, str> {
String::from_utf8_lossy(&self.body)
}
pub fn into_body(self) -> Vec<u8> {
self.body
}
}