From de97c34c20c3f180f2b09b0e5be8981b1e4b170f Mon Sep 17 00:00:00 2001 From: metamuffin Date: Mon, 19 Aug 2024 14:05:47 +0200 Subject: debug module --- src/modules/debug.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/modules/debug.rs (limited to 'src/modules/debug.rs') diff --git a/src/modules/debug.rs b/src/modules/debug.rs new file mode 100644 index 0000000..3ab03ec --- /dev/null +++ b/src/modules/debug.rs @@ -0,0 +1,44 @@ +use super::{Node, NodeContext, NodeKind, NodeRequest, NodeResponse}; +use crate::error::ServiceError; +use futures::Future; +use http::{header::CONTENT_TYPE, HeaderValue, Response}; +use http_body_util::BodyExt; +use serde::Deserialize; +use serde_yaml::Value; +use std::{pin::Pin, sync::Arc}; + +pub struct DebugKind; + +#[derive(Deserialize)] +struct Debug; + +impl NodeKind for DebugKind { + fn name(&self) -> &'static str { + "debug" + } + fn instanciate(&self, config: Value) -> anyhow::Result> { + Ok(Arc::new(serde_yaml::from_value::(config)?)) + } +} + +impl Node for Debug { + fn handle<'a>( + &'a self, + context: &'a mut NodeContext, + request: NodeRequest, + ) -> Pin> + Send + Sync + 'a>> { + Box::pin(async move { + let s = format!( + "address: {:?}\nverion: {:?}\nuri: {:?}\nheaders: {:#?}", + context.addr, + request.version(), + request.uri(), + request.headers(), + ); + let mut r = Response::new(s); + r.headers_mut() + .insert(CONTENT_TYPE, HeaderValue::from_static("text/plain")); + Ok(r.map(|b| b.map_err(|e| match e {}).boxed())) + }) + } +} -- cgit v1.2.3-70-g09d2