Convert serde_test's assert_next_token from macro to function

This commit is contained in:
David Tolnay
2023-05-04 16:33:46 -07:00
parent 1b8290b318
commit 8f4d37c7ec
+21 -27
View File
@@ -12,24 +12,18 @@ pub struct Deserializer<'de> {
tokens: &'de [Token], tokens: &'de [Token],
} }
macro_rules! assert_next_token { fn assert_next_token(de: &mut Deserializer, expected: Token) -> Result<(), Error> {
($de:expr, $expected:expr) => { match de.next_token_opt() {
match $de.next_token_opt() { Some(token) if token == expected => Ok(()),
Some(token) if token == $expected => {} Some(other) => Err(de::Error::custom(format!(
Some(other) => { "expected Token::{} but deserialization wants Token::{}",
return Err(de::Error::custom(format!( other, expected,
"expected Token::{} but deserialization wants Token::{}", ))),
other, $expected None => Err(de::Error::custom(format!(
))) "end of tokens but deserialization wants Token::{}",
} expected,
None => { ))),
return Err(de::Error::custom(format!( }
"end of tokens but deserialization wants Token::{}",
$expected
)))
}
}
};
} }
fn unexpected(token: Token) -> Error { fn unexpected(token: Token) -> Error {
@@ -99,7 +93,7 @@ impl<'de> Deserializer<'de> {
len: len, len: len,
end: end, end: end,
})?; })?;
assert_next_token!(self, end); assert_next_token(self, end)?;
Ok(value) Ok(value)
} }
@@ -117,7 +111,7 @@ impl<'de> Deserializer<'de> {
len: len, len: len,
end: end, end: end,
})?; })?;
assert_next_token!(self, end); assert_next_token(self, end)?;
Ok(value) Ok(value)
} }
} }
@@ -291,7 +285,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
{ {
match self.peek_token() { match self.peek_token() {
Token::UnitStruct { .. } => { Token::UnitStruct { .. } => {
assert_next_token!(self, Token::UnitStruct { name: name }); assert_next_token(self, Token::UnitStruct { name: name })?;
visitor.visit_unit() visitor.visit_unit()
} }
_ => self.deserialize_any(visitor), _ => self.deserialize_any(visitor),
@@ -308,7 +302,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
{ {
match self.peek_token() { match self.peek_token() {
Token::NewtypeStruct { .. } => { Token::NewtypeStruct { .. } => {
assert_next_token!(self, Token::NewtypeStruct { name: name }); assert_next_token(self, Token::NewtypeStruct { name: name })?;
visitor.visit_newtype_struct(self) visitor.visit_newtype_struct(self)
} }
_ => self.deserialize_any(visitor), _ => self.deserialize_any(visitor),
@@ -355,7 +349,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
visitor.visit_unit() visitor.visit_unit()
} }
Token::UnitStruct { .. } => { Token::UnitStruct { .. } => {
assert_next_token!(self, Token::UnitStruct { name: name }); assert_next_token(self, Token::UnitStruct { name: name })?;
visitor.visit_unit() visitor.visit_unit()
} }
Token::Seq { .. } => { Token::Seq { .. } => {
@@ -367,7 +361,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
self.visit_seq(Some(len), Token::TupleEnd, visitor) self.visit_seq(Some(len), Token::TupleEnd, visitor)
} }
Token::TupleStruct { len: n, .. } => { Token::TupleStruct { len: n, .. } => {
assert_next_token!(self, Token::TupleStruct { name: name, len: n }); assert_next_token(self, Token::TupleStruct { name: name, len: n })?;
self.visit_seq(Some(len), Token::TupleStructEnd, visitor) self.visit_seq(Some(len), Token::TupleStructEnd, visitor)
} }
_ => self.deserialize_any(visitor), _ => self.deserialize_any(visitor),
@@ -385,7 +379,7 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
{ {
match self.peek_token() { match self.peek_token() {
Token::Struct { len: n, .. } => { Token::Struct { len: n, .. } => {
assert_next_token!(self, Token::Struct { name: name, len: n }); assert_next_token(self, Token::Struct { name: name, len: n })?;
self.visit_map(Some(fields.len()), Token::StructEnd, visitor) self.visit_map(Some(fields.len()), Token::StructEnd, visitor)
} }
Token::Map { .. } => { Token::Map { .. } => {
@@ -644,7 +638,7 @@ impl<'de, 'a> MapAccess<'de> for EnumMapVisitor<'a, 'de> {
}; };
seed.deserialize(SeqAccessDeserializer::new(visitor))? seed.deserialize(SeqAccessDeserializer::new(visitor))?
}; };
assert_next_token!(self.de, Token::TupleVariantEnd); assert_next_token(self.de, Token::TupleVariantEnd)?;
Ok(value) Ok(value)
} }
EnumFormat::Map => { EnumFormat::Map => {
@@ -656,7 +650,7 @@ impl<'de, 'a> MapAccess<'de> for EnumMapVisitor<'a, 'de> {
}; };
seed.deserialize(MapAccessDeserializer::new(visitor))? seed.deserialize(MapAccessDeserializer::new(visitor))?
}; };
assert_next_token!(self.de, Token::StructVariantEnd); assert_next_token(self.de, Token::StructVariantEnd)?;
Ok(value) Ok(value)
} }
EnumFormat::Any => seed.deserialize(&mut *self.de), EnumFormat::Any => seed.deserialize(&mut *self.de),