use crate::request;
use crate::transport::Transport;
use anyhow::Context;
#[derive(Clone, Debug, Default)]
pub struct ResponseInfo {
pub http_version: String,
pub status_code: u16,
pub status_message: String,
}
impl ResponseInfo {
pub fn parse_response_info(response: &str) -> Result<ResponseInfo, anyhow::Error> {
let mut response_info = ResponseInfo {
http_version: String::new(),
status_code: 0,
status_message: String::new(),
};
let response_info_vec: Vec<&str> = response.split(" ").collect();
if response_info_vec.len() < 2 {
return Err(anyhow::anyhow!("Failed to parse response info"));
}
response_info.http_version = response_info_vec[0].to_string();
response_info.status_code = response_info_vec[1].parse::<u16>().with_context(|| {
format!(
"Failed to parse status code from response: {}",
response_info_vec[1]
)
})?;
response_info.status_message = response_info_vec[2..].join(" ");
Ok(response_info)
}
}
#[allow(missing_debug_implementations)]
pub struct Response {
pub response_info: ResponseInfo,
pub headers: Vec<request::Header>,
pub stream: Transport,
}