#[cfg(feature = "http-input")]
use serde::{Deserialize, Serialize};
#[cfg(feature = "http-input")]
use crate::types::AgentId;
#[cfg(feature = "http-input")]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HttpInputConfig {
pub bind_address: String,
pub port: u16,
pub path: String,
pub agent: AgentId,
pub auth_header: Option<String>,
pub jwt_public_key_path: Option<String>,
pub max_body_bytes: usize,
pub concurrency: usize,
pub routing_rules: Option<Vec<AgentRoutingRule>>,
pub response_control: Option<ResponseControlConfig>,
pub forward_headers: Vec<String>,
pub cors_enabled: bool,
pub audit_enabled: bool,
}
#[cfg(feature = "http-input")]
impl Default for HttpInputConfig {
fn default() -> Self {
Self {
bind_address: "0.0.0.0".to_string(),
port: 8081,
path: "/webhook".to_string(),
agent: AgentId::new(),
auth_header: None,
jwt_public_key_path: None,
max_body_bytes: 65536, concurrency: 10,
routing_rules: None,
response_control: None,
forward_headers: vec![],
cors_enabled: false,
audit_enabled: true,
}
}
}
#[cfg(feature = "http-input")]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AgentRoutingRule {
pub condition: RouteMatch,
pub agent: AgentId,
}
#[cfg(feature = "http-input")]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum RouteMatch {
PathPrefix(String),
HeaderEquals(String, String),
JsonFieldEquals(String, String),
}
#[cfg(feature = "http-input")]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResponseControlConfig {
pub default_status: u16,
pub agent_output_to_json: bool,
pub error_status: u16,
pub echo_input_on_error: bool,
}
#[cfg(feature = "http-input")]
impl Default for ResponseControlConfig {
fn default() -> Self {
Self {
default_status: 200,
agent_output_to_json: true,
error_status: 500,
echo_input_on_error: false,
}
}
}