use crate::{
category::Stress,
gloss::{GlossFlags, GlossStatic},
prelude::{IntoTokens, IntoTokensFlags, TokenList},
romanize::{
flags::FromTokenFlags,
stream::{ParseError, TokenStream},
token::GlottalStop,
traits::FromTokens,
},
};
#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub struct ParsingAdjunct {
pub stress: Stress,
}
impl GlossStatic for ParsingAdjunct {
fn gloss_static(&self, flags: GlossFlags) -> &'static str {
self.stress.gloss_static(flags)
}
}
impl FromTokens for ParsingAdjunct {
fn parse_volatile(stream: &mut TokenStream, flags: FromTokenFlags) -> Result<Self, ParseError> {
let stress = stream.parse(flags)?;
let _: GlottalStop = stream.next().ok_or(ParseError::ExpectedGlottalStop)?;
Ok(ParsingAdjunct { stress })
}
}
impl IntoTokens for ParsingAdjunct {
fn append_to(&self, list: &mut TokenList, _flags: IntoTokensFlags) {
list.push(self.stress);
list.push(GlottalStop);
}
}