rusty_request/requests/
get.rsuse std::{
io::{Read, Write},
net::TcpStream,
sync::{Arc, Mutex},
};
use http_scrap::Response;
use crate::Get;
impl<'get> Get<'get> {
pub fn new(stream: &'get TcpStream) -> Self {
let org_stream = Arc::new(Mutex::new(stream));
let mut buffer = [0; 1024];
let mut stream = org_stream.lock().unwrap();
stream.read(&mut buffer);
let response = String::from_utf8_lossy(&buffer);
let path = Response::new(&response);
let path = path.path();
Get {
stream: Arc::clone(&org_stream),
path: path.to_string(),
match_path: None,
content: None,
}
}
pub fn path(&self, path: &str) -> Self {
Self {
path: self.path.clone(),
stream: self.stream.clone(),
match_path: Some(path.to_string()),
content: None,
}
}
pub fn content(&self, content: &str) -> Self {
Self {
content: Some(content.to_string()),
match_path: self.match_path.clone(),
path: self.path.clone(),
stream: self.stream.clone(),
}
}
pub fn send(&self) -> () {
let mut stream: std::sync::MutexGuard<'_, &TcpStream> = self.stream.lock().unwrap();
let match_path = self.match_path.clone().unwrap();
if self.path == match_path {
match &self.content {
Some(content) => {
let response = format!(
"HTTP/1.1 200 OK\r\nContent-Length: {}\r\n\r\n{}",
content.len(),
content
);
println!("{}", response);
stream.write_all(response.as_bytes());
stream.flush();
}
None => {}
}
}
}
}