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
|
2023-01-12 09:41:47 -05:00
|
|
|
}
|