use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionManagementConfig {
pub affinity: SessionAffinityConfig,
pub persistence: SessionPersistenceConfig,
pub replication: SessionReplicationConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionAffinityConfig {
pub enabled: bool,
pub method: AffinityMethod,
pub timeout: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AffinityMethod {
CookieBased,
IPBased,
SessionID,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionPersistenceConfig {
pub persistence_type: PersistenceType,
pub storage: SessionStorageConfig,
pub encryption: SessionEncryptionConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PersistenceType {
InMemory,
Database,
Redis,
File,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionStorageConfig {
pub storage_type: String,
pub connection_string: String,
pub pool_size: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionEncryptionConfig {
pub enabled: bool,
pub algorithm: String,
pub key_management: KeyManagementConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeyManagementConfig {
pub key_source: KeySource,
pub rotation: KeyRotationConfig,
pub backup: KeyBackupConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum KeySource {
Static,
Environment,
KeyVault,
HSM,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeyRotationConfig {
pub enabled: bool,
pub interval: Duration,
pub overlap_period: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeyBackupConfig {
pub enabled: bool,
pub frequency: Duration,
pub location: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionReplicationConfig {
pub enabled: bool,
pub strategy: ReplicationStrategy,
pub factor: usize,
pub consistency: ConsistencyLevel,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ReplicationStrategy {
Synchronous,
Asynchronous,
SemiSynchronous,
EventualConsistency,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ConsistencyLevel {
Strong,
Eventual,
Session,
Bounded,
}