use serde::{Deserialize, Serialize};
use std::collections::HashMap;
pub struct MultiCloudConfig {
pub enabled: bool,
pub primary_provider: CloudProvider,
pub secondary_providers: Vec<CloudProvider>,
pub replication_strategy: ReplicationStrategy,
pub failover: MultiCloudFailoverConfig,
}
impl Default for MultiCloudConfig {
fn default() -> Self {
Self {
enabled: false,
primary_provider: CloudProvider::AWS,
secondary_providers: vec![CloudProvider::GCP, CloudProvider::Azure],
replication_strategy: ReplicationStrategy::ActivePassive,
failover: MultiCloudFailoverConfig::default(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum CloudProvider {
AWS,
GCP,
Azure,
DigitalOcean,
Linode,
OnPremise,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ReplicationStrategy {
ActiveActive,
ActivePassive,
MultiMaster,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MultiCloudFailoverConfig {
pub auto_failover: bool,
pub failover_threshold: Duration,
pub health_check_interval: Duration,
pub failback_enabled: bool,
}
impl Default for MultiCloudFailoverConfig {
fn default() -> Self {
Self {
auto_failover: true,
failover_threshold: Duration::from_secs(300),
health_check_interval: Duration::from_secs(30),
failback_enabled: true,
}
}
}