aboutsummaryrefslogtreecommitdiff
path: root/src/filters/mod.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-05-29 16:37:44 +0200
committermetamuffin <metamuffin@disroot.org>2024-05-29 16:37:44 +0200
commit886a18e0c67624d0882f04c7f6659bcfee6b4d8d (patch)
tree32a5389076b199c4e06fa10ce6b54d165d5466c5 /src/filters/mod.rs
parent6cebab912dcf01bbe225c20ec2e7656f61ba160e (diff)
downloadgnix-886a18e0c67624d0882f04c7f6659bcfee6b4d8d.tar
gnix-886a18e0c67624d0882f04c7f6659bcfee6b4d8d.tar.bz2
gnix-886a18e0c67624d0882f04c7f6659bcfee6b4d8d.tar.zst
refactor filter system
Diffstat (limited to 'src/filters/mod.rs')
-rw-r--r--src/filters/mod.rs47
1 files changed, 46 insertions, 1 deletions
diff --git a/src/filters/mod.rs b/src/filters/mod.rs
index fdeed51..10520a3 100644
--- a/src/filters/mod.rs
+++ b/src/filters/mod.rs
@@ -1,5 +1,50 @@
+use crate::error::ServiceError;
+use crate::State;
+use accesslog::AccessLogKind;
+use auth::HttpBasicAuthKind;
+use bytes::Bytes;
+use error::ErrorKind;
+use files::FilesKind;
+use futures::Future;
+use hosts::HostsKind;
+use http_body_util::combinators::BoxBody;
+use hyper::{body::Incoming, Request, Response};
+use proxy::ProxyKind;
+use serde_yaml::Value;
+use std::{net::SocketAddr, pin::Pin, sync::Arc};
+pub mod accesslog;
pub mod auth;
+pub mod error;
pub mod files;
+pub mod hosts;
pub mod proxy;
-pub mod accesslog; \ No newline at end of file
+
+pub type NodeRequest = Request<Incoming>;
+pub type NodeResponse = Response<BoxBody<Bytes, ServiceError>>;
+
+pub static MODULES: &'static [&'static dyn NodeKind] = &[
+ &HttpBasicAuthKind,
+ &ProxyKind,
+ &HostsKind,
+ &FilesKind,
+ &AccessLogKind,
+ &ErrorKind,
+];
+
+pub struct NodeContext {
+ pub state: Arc<State>,
+ pub addr: SocketAddr,
+}
+
+pub trait NodeKind: Send + Sync + 'static {
+ fn name(&self) -> &'static str;
+ fn instanciate(&self, config: Value) -> anyhow::Result<Arc<dyn Node>>;
+}
+pub trait Node: Send + Sync + 'static {
+ fn handle<'a>(
+ &'a self,
+ context: &'a mut NodeContext,
+ request: NodeRequest,
+ ) -> Pin<Box<dyn Future<Output = Result<NodeResponse, ServiceError>> + Send + Sync + 'a>>;
+}