use crate::app::variations::*;
use crate::app::QualifierCode;
use crate::app::parse::count::CountSequence;
use crate::app::parse::parser::*;
use crate::app::ObjectParseError;
use scursor::ReadCursor;
#[derive(Debug, PartialEq)]
pub(crate) enum CountVariation<'a> {
Group2Var0,
Group2Var1,
Group2Var2,
Group2Var3,
Group4Var0,
Group4Var1,
Group4Var2,
Group4Var3,
Group11Var0,
Group11Var1,
Group11Var2,
Group13Var1,
Group13Var2,
Group22Var0,
Group22Var1,
Group22Var2,
Group22Var5,
Group22Var6,
Group23Var0,
Group23Var1,
Group23Var2,
Group23Var5,
Group23Var6,
Group32Var0,
Group32Var1,
Group32Var2,
Group32Var3,
Group32Var4,
Group32Var5,
Group32Var6,
Group32Var7,
Group32Var8,
Group33Var0,
Group33Var1,
Group33Var2,
Group33Var3,
Group33Var4,
Group33Var5,
Group33Var6,
Group33Var7,
Group33Var8,
Group42Var0,
Group42Var1,
Group42Var2,
Group42Var3,
Group42Var4,
Group42Var5,
Group42Var6,
Group42Var7,
Group42Var8,
Group43Var1,
Group43Var2,
Group43Var3,
Group43Var4,
Group43Var5,
Group43Var6,
Group43Var7,
Group43Var8,
Group50Var1(CountSequence<'a, Group50Var1>),
Group50Var2(CountSequence<'a, Group50Var2>),
Group50Var3(CountSequence<'a, Group50Var3>),
Group50Var4(CountSequence<'a, Group50Var4>),
Group51Var1(CountSequence<'a, Group51Var1>),
Group51Var2(CountSequence<'a, Group51Var2>),
Group52Var1(CountSequence<'a, Group52Var1>),
Group52Var2(CountSequence<'a, Group52Var2>),
Group60Var2,
Group60Var3,
Group60Var4,
Group111Var0,
Group111VarX(u8),
}
impl<'a> CountVariation<'a> {
pub(crate) fn parse(v: Variation, qualifier: QualifierCode, count: u16, cursor: &mut ReadCursor<'a>) -> Result<CountVariation<'a>, ObjectParseError> {
match v {
Variation::Group2Var0 => Ok(CountVariation::Group2Var0),
Variation::Group2Var1 => Ok(CountVariation::Group2Var1),
Variation::Group2Var2 => Ok(CountVariation::Group2Var2),
Variation::Group2Var3 => Ok(CountVariation::Group2Var3),
Variation::Group4Var0 => Ok(CountVariation::Group4Var0),
Variation::Group4Var1 => Ok(CountVariation::Group4Var1),
Variation::Group4Var2 => Ok(CountVariation::Group4Var2),
Variation::Group4Var3 => Ok(CountVariation::Group4Var3),
Variation::Group11Var0 => Ok(CountVariation::Group11Var0),
Variation::Group11Var1 => Ok(CountVariation::Group11Var1),
Variation::Group11Var2 => Ok(CountVariation::Group11Var2),
Variation::Group13Var1 => Ok(CountVariation::Group13Var1),
Variation::Group13Var2 => Ok(CountVariation::Group13Var2),
Variation::Group22Var0 => Ok(CountVariation::Group22Var0),
Variation::Group22Var1 => Ok(CountVariation::Group22Var1),
Variation::Group22Var2 => Ok(CountVariation::Group22Var2),
Variation::Group22Var5 => Ok(CountVariation::Group22Var5),
Variation::Group22Var6 => Ok(CountVariation::Group22Var6),
Variation::Group23Var0 => Ok(CountVariation::Group23Var0),
Variation::Group23Var1 => Ok(CountVariation::Group23Var1),
Variation::Group23Var2 => Ok(CountVariation::Group23Var2),
Variation::Group23Var5 => Ok(CountVariation::Group23Var5),
Variation::Group23Var6 => Ok(CountVariation::Group23Var6),
Variation::Group32Var0 => Ok(CountVariation::Group32Var0),
Variation::Group32Var1 => Ok(CountVariation::Group32Var1),
Variation::Group32Var2 => Ok(CountVariation::Group32Var2),
Variation::Group32Var3 => Ok(CountVariation::Group32Var3),
Variation::Group32Var4 => Ok(CountVariation::Group32Var4),
Variation::Group32Var5 => Ok(CountVariation::Group32Var5),
Variation::Group32Var6 => Ok(CountVariation::Group32Var6),
Variation::Group32Var7 => Ok(CountVariation::Group32Var7),
Variation::Group32Var8 => Ok(CountVariation::Group32Var8),
Variation::Group33Var0 => Ok(CountVariation::Group33Var0),
Variation::Group33Var1 => Ok(CountVariation::Group33Var1),
Variation::Group33Var2 => Ok(CountVariation::Group33Var2),
Variation::Group33Var3 => Ok(CountVariation::Group33Var3),
Variation::Group33Var4 => Ok(CountVariation::Group33Var4),
Variation::Group33Var5 => Ok(CountVariation::Group33Var5),
Variation::Group33Var6 => Ok(CountVariation::Group33Var6),
Variation::Group33Var7 => Ok(CountVariation::Group33Var7),
Variation::Group33Var8 => Ok(CountVariation::Group33Var8),
Variation::Group42Var0 => Ok(CountVariation::Group42Var0),
Variation::Group42Var1 => Ok(CountVariation::Group42Var1),
Variation::Group42Var2 => Ok(CountVariation::Group42Var2),
Variation::Group42Var3 => Ok(CountVariation::Group42Var3),
Variation::Group42Var4 => Ok(CountVariation::Group42Var4),
Variation::Group42Var5 => Ok(CountVariation::Group42Var5),
Variation::Group42Var6 => Ok(CountVariation::Group42Var6),
Variation::Group42Var7 => Ok(CountVariation::Group42Var7),
Variation::Group42Var8 => Ok(CountVariation::Group42Var8),
Variation::Group43Var1 => Ok(CountVariation::Group43Var1),
Variation::Group43Var2 => Ok(CountVariation::Group43Var2),
Variation::Group43Var3 => Ok(CountVariation::Group43Var3),
Variation::Group43Var4 => Ok(CountVariation::Group43Var4),
Variation::Group43Var5 => Ok(CountVariation::Group43Var5),
Variation::Group43Var6 => Ok(CountVariation::Group43Var6),
Variation::Group43Var7 => Ok(CountVariation::Group43Var7),
Variation::Group43Var8 => Ok(CountVariation::Group43Var8),
Variation::Group50Var1 => Ok(CountVariation::Group50Var1(CountSequence::parse(count, cursor)?)),
Variation::Group50Var2 => Ok(CountVariation::Group50Var2(CountSequence::parse(count, cursor)?)),
Variation::Group50Var3 => Ok(CountVariation::Group50Var3(CountSequence::parse(count, cursor)?)),
Variation::Group50Var4 => Ok(CountVariation::Group50Var4(CountSequence::parse(count, cursor)?)),
Variation::Group51Var1 => Ok(CountVariation::Group51Var1(CountSequence::parse(count, cursor)?)),
Variation::Group51Var2 => Ok(CountVariation::Group51Var2(CountSequence::parse(count, cursor)?)),
Variation::Group52Var1 => Ok(CountVariation::Group52Var1(CountSequence::parse(count, cursor)?)),
Variation::Group52Var2 => Ok(CountVariation::Group52Var2(CountSequence::parse(count, cursor)?)),
Variation::Group60Var2 => Ok(CountVariation::Group60Var2),
Variation::Group60Var3 => Ok(CountVariation::Group60Var3),
Variation::Group60Var4 => Ok(CountVariation::Group60Var4),
Variation::Group111(0) => Ok(CountVariation::Group111Var0),
Variation::Group111(x) => Ok(CountVariation::Group111VarX(x)),
_ => Err(ObjectParseError::InvalidQualifierForVariation(v, qualifier)),
}
}
pub(crate) fn format_objects(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
match self {
CountVariation::Group2Var0 => Ok(()),
CountVariation::Group2Var1 => Ok(()),
CountVariation::Group2Var2 => Ok(()),
CountVariation::Group2Var3 => Ok(()),
CountVariation::Group4Var0 => Ok(()),
CountVariation::Group4Var1 => Ok(()),
CountVariation::Group4Var2 => Ok(()),
CountVariation::Group4Var3 => Ok(()),
CountVariation::Group11Var0 => Ok(()),
CountVariation::Group11Var1 => Ok(()),
CountVariation::Group11Var2 => Ok(()),
CountVariation::Group13Var1 => Ok(()),
CountVariation::Group13Var2 => Ok(()),
CountVariation::Group22Var0 => Ok(()),
CountVariation::Group22Var1 => Ok(()),
CountVariation::Group22Var2 => Ok(()),
CountVariation::Group22Var5 => Ok(()),
CountVariation::Group22Var6 => Ok(()),
CountVariation::Group23Var0 => Ok(()),
CountVariation::Group23Var1 => Ok(()),
CountVariation::Group23Var2 => Ok(()),
CountVariation::Group23Var5 => Ok(()),
CountVariation::Group23Var6 => Ok(()),
CountVariation::Group32Var0 => Ok(()),
CountVariation::Group32Var1 => Ok(()),
CountVariation::Group32Var2 => Ok(()),
CountVariation::Group32Var3 => Ok(()),
CountVariation::Group32Var4 => Ok(()),
CountVariation::Group32Var5 => Ok(()),
CountVariation::Group32Var6 => Ok(()),
CountVariation::Group32Var7 => Ok(()),
CountVariation::Group32Var8 => Ok(()),
CountVariation::Group33Var0 => Ok(()),
CountVariation::Group33Var1 => Ok(()),
CountVariation::Group33Var2 => Ok(()),
CountVariation::Group33Var3 => Ok(()),
CountVariation::Group33Var4 => Ok(()),
CountVariation::Group33Var5 => Ok(()),
CountVariation::Group33Var6 => Ok(()),
CountVariation::Group33Var7 => Ok(()),
CountVariation::Group33Var8 => Ok(()),
CountVariation::Group42Var0 => Ok(()),
CountVariation::Group42Var1 => Ok(()),
CountVariation::Group42Var2 => Ok(()),
CountVariation::Group42Var3 => Ok(()),
CountVariation::Group42Var4 => Ok(()),
CountVariation::Group42Var5 => Ok(()),
CountVariation::Group42Var6 => Ok(()),
CountVariation::Group42Var7 => Ok(()),
CountVariation::Group42Var8 => Ok(()),
CountVariation::Group43Var1 => Ok(()),
CountVariation::Group43Var2 => Ok(()),
CountVariation::Group43Var3 => Ok(()),
CountVariation::Group43Var4 => Ok(()),
CountVariation::Group43Var5 => Ok(()),
CountVariation::Group43Var6 => Ok(()),
CountVariation::Group43Var7 => Ok(()),
CountVariation::Group43Var8 => Ok(()),
CountVariation::Group50Var1(seq) => format_count_of_items(f, seq.iter()),
CountVariation::Group50Var2(seq) => format_count_of_items(f, seq.iter()),
CountVariation::Group50Var3(seq) => format_count_of_items(f, seq.iter()),
CountVariation::Group50Var4(seq) => format_count_of_items(f, seq.iter()),
CountVariation::Group51Var1(seq) => format_count_of_items(f, seq.iter()),
CountVariation::Group51Var2(seq) => format_count_of_items(f, seq.iter()),
CountVariation::Group52Var1(seq) => format_count_of_items(f, seq.iter()),
CountVariation::Group52Var2(seq) => format_count_of_items(f, seq.iter()),
CountVariation::Group60Var2 => Ok(()),
CountVariation::Group60Var3 => Ok(()),
CountVariation::Group60Var4 => Ok(()),
CountVariation::Group111Var0 => Ok(()),
CountVariation::Group111VarX(_) => Ok(()),
}
}
}