mirror-server/src/main.rs

50 lines
1.3 KiB
Rust
Raw Normal View History

2023-01-12 15:31:03 -05:00
use actix_web::{web::Json, App, HttpRequest, HttpServer, Responder};
use serde::Serialize;
#[derive(Serialize)]
struct EchoHeader {
name: String,
value: String,
}
#[derive(Serialize)]
struct EchoResponse {
method: String,
path: String,
host: String,
headers: Vec<EchoHeader>,
}
impl EchoResponse {
fn new(req: &HttpRequest) -> Self {
let req_uri = req.uri();
let headers = req
.headers()
.iter()
.map(|(header_name, header_value)| EchoHeader {
name: header_name.to_string(),
value: header_value.to_str().unwrap_or("ERROR").to_string(),
})
.collect::<Vec<EchoHeader>>();
EchoResponse {
method: req.method().to_string(),
path: req_uri.path().to_string(),
host: req_uri.host().unwrap_or("").to_string(),
headers,
}
}
}
async fn echo_request(request: HttpRequest) -> actix_web::Result<impl Responder> {
let echo = EchoResponse::new(&request);
Ok(Json(echo))
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| App::new().default_service(actix_web::web::route().to(echo_request)))
.bind(("0.0.0.0", 8080))?
.run()
.await
}