use crate::types::priority;
use std::collections::HashMap;
#[derive(Debug)]
pub enum RequestAction {
Continue,
Respond(PluginResponse),
}
#[derive(Debug, Clone)]
pub struct PluginResponse {
pub status: u16,
pub headers: Vec<(String, String)>,
pub body: Vec<u8>,
}
#[derive(Debug)]
pub struct RequestContext {
pub method: String,
pub path: String,
pub hostname: String,
pub headers: Vec<(String, String)>,
pub query_string: String,
pub peer_ip: Option<String>,
pub tenant_id: Option<String>,
pub site_id: Option<String>,
pub extensions: HashMap<String, String>,
}
#[derive(Debug)]
pub struct ResponseHeaders {
pub status: u16,
pub headers: Vec<(String, String)>,
}
pub trait MiddlewarePlugin: Send + Sync {
fn name(&self) -> &str;
fn priority(&self) -> u32 {
priority::PLUGIN_DEFAULT
}
fn on_request(&self, ctx: &mut RequestContext) -> Result<RequestAction, String>;
fn on_response(
&self,
ctx: &RequestContext,
headers: &mut ResponseHeaders,
) -> Result<(), String>;
}