use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct GrammarSpec {
#[serde(default)]
pub grammar: BTreeMap<String, String>,
}
impl GrammarSpec {
pub fn from_hjson(body: &str) -> Result<Option<Self>, String> {
if body.trim().is_empty() {
return Ok(None);
}
let block = crate::language_entry::extract_hjson_block(body).unwrap_or(body);
match serde_hjson::from_str::<Self>(block) {
Ok(s) if !s.grammar.is_empty() => Ok(Some(s)),
Ok(_) => Ok(None),
Err(e) => Err(format!("grammar HJSON parse failed: {e}")),
}
}
}