use serde::Deserialize;
use super::AllophonyRule;
#[derive(Debug, Clone, Default, Deserialize)]
pub struct Diachronics {
#[serde(default)]
pub proto: Option<String>,
#[serde(default)]
pub rules: Vec<AllophonyRule>,
}
impl Diachronics {
pub fn from_hjson(body: &str) -> Result<Option<Self>, String> {
if body.trim().is_empty() {
return Ok(None);
}
#[derive(Deserialize)]
struct Wrapper {
#[serde(default)]
diachronics: Diachronics,
}
let block = crate::language_entry::extract_hjson_block(body).unwrap_or(body);
match serde_hjson::from_str::<Wrapper>(block) {
Ok(w) if !w.diachronics.rules.is_empty() => Ok(Some(w.diachronics)),
Ok(_) => Ok(None),
Err(e) => Err(format!("diachronics HJSON parse failed: {e}")),
}
}
}