trillium-proxy 0.7.0

reverse proxy for trillium.rs
Documentation
use querystrong::QueryStrong;
use trillium::Conn;
use trillium_api::{ApiConnExt, json};
use trillium_forwarding::Forwarding;
use trillium_http::Status;
use trillium_logger::Logger;

pub fn main() {
    env_logger::init();
    trillium_smol::run((
        Logger::new(),
        Forwarding::trust_always(),
        |mut conn: Conn| async move {
            let query = QueryStrong::parse(conn.querystring()).into_owned();
            let skip_body = query.get("skip_body").is_some();

            let body = if skip_body {
                None
            } else {
                match conn.request_body().read_string().await {
                    Ok(body) => Some(body),
                    Err(e) => {
                        return conn
                            .with_status(Status::InternalServerError)
                            .with_body(e.to_string());
                    }
                }
            };

            let json = json!({
                "path": conn.path(),
                "method": conn.method(),
                "headers": conn.request_headers(),
                "ip": conn.peer_ip(),
                "query": query,
                "body": body,
                "version": conn.http_version()
            });
            conn.with_json(&json).with_status(Status::Ok)
        },
    ));
}