use std::{io::{Read, Write}, net::{TcpStream, ToSocketAddrs}};
pub fn get<A: ToSocketAddrs>(addr: A, path: &str) -> std::io::Result<Vec<u8>> {
let mut socket = TcpStream::connect(addr)?;
let req = format!("GET {}\r\n\r\n", path);
socket.write_all(req.as_bytes())?;
let mut response = Vec::with_capacity(1024);
socket.read_to_end(&mut response)?;
Ok(response)
}
#[cfg(test)]
mod tests {
use crate::get;
#[test]
fn test_request_to_server() {
get("rust-lang.com:80", "/").unwrap();
}
#[test]
fn test_invalid_req() {
get("%", "/")
.expect_err("Expected an error for invalid address");
}
#[test]
fn test_invalid_port() {
get("rust-lang.com:99999", "/")
.expect_err("Expected an error for invalid port");
}
#[test]
fn test_missing_port() {
get("example.com", "/")
.expect_err("Expected an error for missing port");
}
}