use super::canary::CanaryConfig;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TrafficDistributionConfig {
pub algorithm: DistributionAlgorithm,
pub weights: HashMap<String, f64>,
pub splitting: TrafficSplittingConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DistributionAlgorithm {
Weighted,
Random,
Consistent,
Geographic,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TrafficSplittingConfig {
pub enabled: bool,
pub rules: Vec<SplitRule>,
pub canary: CanaryConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SplitRule {
pub name: String,
pub condition: SplitCondition,
pub percentage: f64,
pub destination: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SplitCondition {
pub headers: HashMap<String, String>,
pub query_params: HashMap<String, String>,
pub user_attributes: HashMap<String, String>,
}