use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NetworkOptimizationConfig {
pub cdn: CDNConfig,
pub connection: ConnectionOptimizationConfig,
pub protocol: ProtocolOptimizationConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CDNConfig {
pub enabled: bool,
pub providers: Vec<String>,
pub cache_policies: Vec<CachePolicy>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CachePolicy {
pub resource_type: String,
pub ttl: Duration,
pub key_strategy: CacheKeyStrategy,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CacheKeyStrategy {
Simple,
Hierarchical,
Hashed,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConnectionOptimizationConfig {
pub keep_alive: KeepAliveConfig,
pub pooling: ConnectionPoolingConfig,
pub compression: CompressionConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeepAliveConfig {
pub enabled: bool,
pub timeout: Duration,
pub max_requests: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConnectionPoolingConfig {
pub pool_size: usize,
pub max_per_host: usize,
pub connection_timeout: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompressionConfig {
pub enabled: bool,
pub algorithms: Vec<CompressionAlgorithm>,
pub level: u8,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CompressionAlgorithm {
Gzip,
Deflate,
Brotli,
LZ4,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProtocolOptimizationConfig {
pub http2: HTTP2Config,
pub quic: QUICConfig,
pub websocket: WebSocketConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HTTP2Config {
pub enabled: bool,
pub server_push: bool,
pub multiplexing: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QUICConfig {
pub enabled: bool,
pub connection_migration: bool,
pub zero_rtt: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WebSocketConfig {
pub enabled: bool,
pub ping_interval: Duration,
pub max_frame_size: usize,
}