#[cfg(feature = "json")]
use serde::{Deserialize, Serialize};
use crate::{
parser::{parse_subset, Parser},
tokenizer::Tokenizer,
GedcomError,
};
#[derive(Clone, Debug, Default, PartialEq)]
#[cfg_attr(feature = "json", derive(Serialize, Deserialize))]
pub struct Translation {
pub value: Option<String>,
pub mime: Option<String>,
pub language: Option<String>,
}
impl Translation {
#[allow(clippy::double_must_use)]
pub fn new(tokenizer: &mut Tokenizer, level: u8) -> Result<Translation, GedcomError> {
let mut tran = Translation::default();
tran.parse(tokenizer, level)?;
Ok(tran)
}
}
impl Parser for Translation {
fn parse(&mut self, tokenizer: &mut Tokenizer, level: u8) -> Result<(), GedcomError> {
self.value = Some(tokenizer.take_line_value()?);
let handle_subset = |tag: &str, tokenizer: &mut Tokenizer| -> Result<(), GedcomError> {
match tag {
"MIME" => self.mime = Some(tokenizer.take_line_value()?),
"LANG" => self.language = Some(tokenizer.take_line_value()?),
_ => {
return Err(GedcomError::ParseError {
line: tokenizer.line,
message: format!("Unhandled Translation Tag: {tag}"),
})
}
}
Ok(())
};
parse_subset(tokenizer, level, handle_subset)?;
Ok(())
}
}