use kernel::{Address, Effort, Proxying};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub enum ConfigLayer {
Default,
City,
Building,
Resident,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct SettledEffort {
pub effort: Effort,
pub from: ConfigLayer,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct SettledSecond {
pub percent: u64,
pub from: ConfigLayer,
pub domain: SecondDomain,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct SecondDomain {
pub min: u64,
pub max: u64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct TuningDefaults {
pub from: ConfigLayer,
pub timeout_ms: u64,
pub request_max_retries: Option<u32>,
pub stream_idle_timeout_ms: Option<u64>,
pub proxying: Proxying,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct ConfigAnswer {
pub addr: Address,
pub effort: Option<SettledEffort>,
pub second: SettledSecond,
#[serde(default)]
pub first: Option<u64>,
pub tuning: TuningDefaults,
}