use crate::{
category::{Case, SuppletiveAdjunctMode},
gloss::{Gloss, GlossFlags, GlossHelpers, GlossStatic},
prelude::{IntoTokens, IntoTokensFlags, TokenList},
romanize::{
flags::FromTokenFlags,
stream::{ParseError, TokenStream},
traits::FromTokens,
},
};
#[derive(Clone, Copy, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub struct SuppletiveAdjunct {
pub mode: SuppletiveAdjunctMode,
pub case: Case,
}
impl Gloss for SuppletiveAdjunct {
fn gloss(&self, flags: GlossFlags) -> String {
let mut output = self.mode.gloss(flags);
output.add_dashed(self.case.gloss_static_non_default(flags));
output
}
}
impl FromTokens for SuppletiveAdjunct {
fn parse_volatile(stream: &mut TokenStream, flags: FromTokenFlags) -> Result<Self, ParseError> {
Ok(SuppletiveAdjunct {
mode: stream.parse(flags)?,
case: stream.parse(flags)?,
})
}
}
impl IntoTokens for SuppletiveAdjunct {
fn append_tokens_to(&self, list: &mut TokenList, _flags: IntoTokensFlags) {
list.push(self.mode);
list.push(self.case);
}
}