use super::logger::{LogLevel, LoggerConfig};
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
pub struct StreamingConfig {
#[serde(default)]
pub logger: LoggerConfig<StreamingLogLevel>,
#[serde(default = "default_max_streams")]
pub max_streams: u8,
#[serde(default)]
pub priority: StreamPriority,
}
impl Default for StreamingConfig {
fn default() -> Self {
Self {
logger: Default::default(),
max_streams: default_max_streams(),
priority: StreamPriority::default(),
}
}
}
fn default_max_streams() -> u8 {
128
}
#[derive(Default, Clone, Copy, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum StreamPriority {
#[default]
#[serde(rename = "default")]
Default,
#[serde(rename = "low")]
Low,
#[serde(rename = "high")]
High,
}
#[derive(Default, Clone, Copy, Debug, serde::Serialize, serde::Deserialize)]
pub enum StreamingLogLevel {
#[default]
#[serde(rename = "disabled")]
Disabled,
#[serde(rename = "basic")]
Basic,
#[serde(rename = "full")]
Full,
}
impl LogLevel for StreamingLogLevel {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_priority_is_default_variant() {
assert_eq!(StreamingConfig::default().priority, StreamPriority::Default);
}
#[cfg(feature = "std")]
#[test]
fn priority_omitted_in_toml_falls_back_to_default() {
let cfg: StreamingConfig = toml::from_str("max_streams = 64").unwrap();
assert_eq!(cfg.priority, StreamPriority::Default);
assert_eq!(cfg.max_streams, 64);
}
#[test]
fn priority_serde_roundtrip() {
for p in [
StreamPriority::Default,
StreamPriority::Low,
StreamPriority::High,
] {
let s = serde_json::to_string(&p).unwrap();
let back: StreamPriority = serde_json::from_str(&s).unwrap();
assert_eq!(p, back);
}
}
#[test]
fn priority_serde_uses_lowercase_names() {
assert_eq!(
serde_json::to_string(&StreamPriority::Low).unwrap(),
"\"low\""
);
assert_eq!(
serde_json::to_string(&StreamPriority::High).unwrap(),
"\"high\""
);
assert_eq!(
serde_json::to_string(&StreamPriority::Default).unwrap(),
"\"default\""
);
}
}