use crate::event::EventLoggerConfig;
use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TapHttpConfig {
pub host: String,
pub port: u16,
pub didcomm_endpoint: String,
pub rate_limit: Option<RateLimitConfig>,
pub tls: Option<TlsConfig>,
pub request_timeout_secs: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub event_logger: Option<EventLoggerConfig>,
pub enable_web_did: bool,
pub max_agents: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RateLimitConfig {
pub max_requests: u32,
pub window_secs: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TlsConfig {
pub cert_path: String,
pub key_path: String,
}
impl Default for TapHttpConfig {
fn default() -> Self {
Self {
host: "127.0.0.1".to_string(),
port: 8000,
didcomm_endpoint: "/didcomm".to_string(),
rate_limit: None,
tls: None,
request_timeout_secs: 30,
event_logger: Some(EventLoggerConfig::default()),
enable_web_did: false,
max_agents: 100,
}
}
}
impl TapHttpConfig {
pub fn server_addr(&self) -> String {
format!("{}:{}", self.host, self.port)
}
pub fn didcomm_url(&self, secure: bool) -> String {
let protocol = if secure || self.tls.is_some() {
"https"
} else {
"http"
};
format!(
"{}://{}:{}{}",
protocol, self.host, self.port, self.didcomm_endpoint
)
}
pub fn request_timeout(&self) -> Duration {
Duration::from_secs(self.request_timeout_secs)
}
}