Factor out tag-to-valueclass
This commit is contained in:
parent
8369d9c4f6
commit
b0549b3f83
|
@ -249,29 +249,40 @@ impl<'de, S: BinarySource<'de>> PackedReader<'de, S> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<Tag> for Option<NextToken> {
|
||||||
|
#[inline(always)]
|
||||||
|
fn from(tag: Tag) -> Self {
|
||||||
|
match tag {
|
||||||
|
Tag::False => Some(NextToken::Value(ValueClass::Atomic(AtomClass::Boolean))),
|
||||||
|
Tag::True => Some(NextToken::Value(ValueClass::Atomic(AtomClass::Boolean))),
|
||||||
|
Tag::Float => Some(NextToken::Value(ValueClass::Atomic(AtomClass::Float))),
|
||||||
|
Tag::Double => Some(NextToken::Value(ValueClass::Atomic(AtomClass::Double))),
|
||||||
|
Tag::Annotation => Some(NextToken::Annotation),
|
||||||
|
Tag::Embedded => Some(NextToken::Value(ValueClass::Embedded)),
|
||||||
|
Tag::SmallInteger(_) => Some(NextToken::Value(ValueClass::Atomic(AtomClass::SignedInteger))),
|
||||||
|
Tag::MediumInteger(_) => Some(NextToken::Value(ValueClass::Atomic(AtomClass::SignedInteger))),
|
||||||
|
Tag::SignedInteger => Some(NextToken::Value(ValueClass::Atomic(AtomClass::SignedInteger))),
|
||||||
|
Tag::String => Some(NextToken::Value(ValueClass::Atomic(AtomClass::String))),
|
||||||
|
Tag::ByteString => Some(NextToken::Value(ValueClass::Atomic(AtomClass::ByteString))),
|
||||||
|
Tag::Symbol => Some(NextToken::Value(ValueClass::Atomic(AtomClass::Symbol))),
|
||||||
|
Tag::Record => Some(NextToken::Value(ValueClass::Compound(CompoundClass::Record))),
|
||||||
|
Tag::Sequence => Some(NextToken::Value(ValueClass::Compound(CompoundClass::Sequence))),
|
||||||
|
Tag::Set => Some(NextToken::Value(ValueClass::Compound(CompoundClass::Set))),
|
||||||
|
Tag::Dictionary => Some(NextToken::Value(ValueClass::Compound(CompoundClass::Dictionary))),
|
||||||
|
Tag::End => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<'de, S: BinarySource<'de>> Reader<'de> for PackedReader<'de, S> {
|
impl<'de, S: BinarySource<'de>> Reader<'de> for PackedReader<'de, S> {
|
||||||
fn peek_class(&mut self) -> io::Result<Option<NextToken>> {
|
fn peek_class(&mut self) -> io::Result<Option<NextToken>> {
|
||||||
match Tag::try_from(match self.peek()? {
|
let tag = Tag::try_from(match self.peek()? {
|
||||||
None => return Ok(None),
|
None => return Ok(None),
|
||||||
Some(b) => b,
|
Some(b) => b,
|
||||||
})? {
|
})?;
|
||||||
Tag::False => Ok(Some(NextToken::Value(ValueClass::Atomic(AtomClass::Boolean)))),
|
match tag.into() {
|
||||||
Tag::True => Ok(Some(NextToken::Value(ValueClass::Atomic(AtomClass::Boolean)))),
|
Some(n) => Ok(Some(n)),
|
||||||
Tag::Float => Ok(Some(NextToken::Value(ValueClass::Atomic(AtomClass::Float)))),
|
None => Err(self.syntax_error("Unexpected tag")),
|
||||||
Tag::Double => Ok(Some(NextToken::Value(ValueClass::Atomic(AtomClass::Double)))),
|
|
||||||
Tag::Annotation => Ok(Some(NextToken::Annotation)),
|
|
||||||
Tag::Embedded => Ok(Some(NextToken::Value(ValueClass::Embedded))),
|
|
||||||
Tag::SmallInteger(_) => Ok(Some(NextToken::Value(ValueClass::Atomic(AtomClass::SignedInteger)))),
|
|
||||||
Tag::MediumInteger(_) => Ok(Some(NextToken::Value(ValueClass::Atomic(AtomClass::SignedInteger)))),
|
|
||||||
Tag::SignedInteger => Ok(Some(NextToken::Value(ValueClass::Atomic(AtomClass::SignedInteger)))),
|
|
||||||
Tag::String => Ok(Some(NextToken::Value(ValueClass::Atomic(AtomClass::String)))),
|
|
||||||
Tag::ByteString => Ok(Some(NextToken::Value(ValueClass::Atomic(AtomClass::ByteString)))),
|
|
||||||
Tag::Symbol => Ok(Some(NextToken::Value(ValueClass::Atomic(AtomClass::Symbol)))),
|
|
||||||
Tag::Record => Ok(Some(NextToken::Value(ValueClass::Compound(CompoundClass::Record)))),
|
|
||||||
Tag::Sequence => Ok(Some(NextToken::Value(ValueClass::Compound(CompoundClass::Sequence)))),
|
|
||||||
Tag::Set => Ok(Some(NextToken::Value(ValueClass::Compound(CompoundClass::Set)))),
|
|
||||||
Tag::Dictionary => Ok(Some(NextToken::Value(ValueClass::Compound(CompoundClass::Dictionary)))),
|
|
||||||
tag @ Tag::End => Err(self.syntax_error(&format!("Invalid tag: {:?}", tag))),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue