use serde::{Deserialize, Serialize};
use std::str::FromStr;
use crate::error::{ModelError, ModelResult};
#[derive(Default, Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub enum JitterPolicy {
#[default]
Full,
None,
Equal,
Decorrelated,
}
impl FromStr for JitterPolicy {
type Err = ModelError;
fn from_str(s: &str) -> ModelResult<Self> {
let s = s.trim();
if s.is_empty() || s.eq_ignore_ascii_case("full") || s.eq_ignore_ascii_case("default") {
Ok(JitterPolicy::Full)
} else if s.eq_ignore_ascii_case("none") {
Ok(JitterPolicy::None)
} else if s.eq_ignore_ascii_case("equal") {
Ok(JitterPolicy::Equal)
} else if s.eq_ignore_ascii_case("decorrelated") {
Ok(JitterPolicy::Decorrelated)
} else {
Err(ModelError::UnknownJitter(s.to_string()))
}
}
}