tnil/word/adjunct/affixual/
mod.rs1mod multiple;
4mod single;
5
6pub use multiple::MultipleAffixAdjunct;
7pub use single::SingleAffixAdjunct;
8
9use crate::{
10 gloss::{Gloss, GlossFlags},
11 prelude::{IntoTokens, TokenList},
12 romanize::{
13 flags::{FromTokenFlags, IntoTokensFlags},
14 stream::{ParseError, TokenStream},
15 token::Token,
16 traits::FromTokens,
17 },
18};
19
20#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
22pub enum AffixualAdjunct {
23 Single(SingleAffixAdjunct),
25
26 Multiple(MultipleAffixAdjunct),
28}
29
30impl Gloss for AffixualAdjunct {
31 fn gloss(&self, flags: GlossFlags) -> String {
32 match self {
33 AffixualAdjunct::Single(value) => value.gloss(flags),
34 AffixualAdjunct::Multiple(value) => value.gloss(flags),
35 }
36 }
37}
38
39impl FromTokens for AffixualAdjunct {
40 fn parse_volatile(stream: &mut TokenStream, flags: FromTokenFlags) -> Result<Self, ParseError> {
41 match stream.peek() {
42 Some(Token::V(_)) => Ok(AffixualAdjunct::Single(stream.parse(flags)?)),
43 Some(Token::Schwa | Token::C(_)) => Ok(AffixualAdjunct::Multiple(stream.parse(flags)?)),
44 _ => Err(ParseError::ExpectedCsOrVx),
45 }
46 }
47}
48
49impl IntoTokens for AffixualAdjunct {
50 fn append_tokens_to(&self, list: &mut TokenList, flags: IntoTokensFlags) {
51 match self {
52 Self::Single(value) => value.append_tokens_to(list, flags),
53 Self::Multiple(value) => value.append_tokens_to(list, flags),
54 }
55 }
56}