1use alloc::{
11 boxed::Box,
12 slice,
13 string::String,
14 vec,
15 vec::Vec,
16};
17use core::{
18 fmt,
19 fmt::Debug,
20 marker::PhantomData,
21 mem::ManuallyDrop,
22 ptr::NonNull,
23};
24use serde::de::Unexpected;
25
26#[derive(Clone, Debug)]
40pub enum Token {
41 Bool(bool),
57
58 I8(i8),
74
75 I16(i16),
91
92 I32(i32),
108
109 I64(i64),
125
126 I128(i128),
142
143 U8(u8),
159
160 U16(u16),
176
177 U32(u32),
193
194 U64(u64),
210
211 U128(u128),
227
228 F32(f32),
244
245 F64(f64),
261
262 Char(char),
278
279 Str(String),
295
296 Bytes(Vec<u8>),
316
317 None,
333
334 Some,
350
351 Unit,
367
368 UnitStruct { name: &'static str },
391
392 UnitVariant {
421 name: &'static str,
422 variant_index: u32,
423 variant: &'static str,
424 },
425
426 NewtypeStruct { name: &'static str },
454
455 NewtypeVariant {
487 name: &'static str,
488 variant_index: u32,
489 variant: &'static str,
490 },
491
492 Seq { len: Option<usize> },
521
522 SeqEnd,
528
529 Tuple { len: usize },
557
558 TupleEnd,
564
565 TupleStruct { name: &'static str, len: usize },
600
601 TupleStructEnd,
607
608 TupleVariant {
648 name: &'static str,
649 variant_index: u32,
650 variant: &'static str,
651 len: usize,
652 },
653
654 TupleVariantEnd,
660
661 Map { len: Option<usize> },
693
694 MapEnd,
700
701 Field(&'static str),
705
706 SkippedField(&'static str),
714
715 Struct { name: &'static str, len: usize },
759
760 StructEnd,
766
767 StructVariant {
812 name: &'static str,
813 variant_index: u32,
814 variant: &'static str,
815 len: usize,
816 },
817
818 StructVariantEnd,
824
825 Unordered(&'static [&'static [Token]]),
868}
869
870#[derive(Clone, Debug, PartialEq)]
874pub(crate) enum CanonicalToken {
875 Bool(bool),
876 I8(i8),
877 I16(i16),
878 I32(i32),
879 I64(i64),
880 I128(i128),
881 U8(u8),
882 U16(u16),
883 U32(u32),
884 U64(u64),
885 U128(u128),
886 F32(f32),
887 F64(f64),
888 Char(char),
889 Str(String),
890 Bytes(Vec<u8>),
891 None,
892 Some,
893 Unit,
894 UnitStruct {
895 name: &'static str,
896 },
897 UnitVariant {
898 name: &'static str,
899 variant_index: u32,
900 variant: &'static str,
901 },
902 NewtypeStruct {
903 name: &'static str,
904 },
905 NewtypeVariant {
906 name: &'static str,
907 variant_index: u32,
908 variant: &'static str,
909 },
910 Seq {
911 len: Option<usize>,
912 },
913 SeqEnd,
914 Tuple {
915 len: usize,
916 },
917 TupleEnd,
918 TupleStruct {
919 name: &'static str,
920 len: usize,
921 },
922 TupleStructEnd,
923 TupleVariant {
924 name: &'static str,
925 variant_index: u32,
926 variant: &'static str,
927 len: usize,
928 },
929 TupleVariantEnd,
930 Map {
931 len: Option<usize>,
932 },
933 MapEnd,
934 Field(&'static str),
935 SkippedField(&'static str),
936 Struct {
937 name: &'static str,
938 len: usize,
939 },
940 StructEnd,
941 StructVariant {
942 name: &'static str,
943 variant_index: u32,
944 variant: &'static str,
945 len: usize,
946 },
947 StructVariantEnd,
948}
949
950pub(crate) struct UnorderedTokens(pub(crate) &'static [&'static [Token]]);
951
952impl TryFrom<Token> for CanonicalToken {
953 type Error = UnorderedTokens;
954
955 fn try_from(token: Token) -> Result<Self, Self::Error> {
956 match token {
957 Token::Bool(value) => Ok(CanonicalToken::Bool(value)),
958 Token::I8(value) => Ok(CanonicalToken::I8(value)),
959 Token::I16(value) => Ok(CanonicalToken::I16(value)),
960 Token::I32(value) => Ok(CanonicalToken::I32(value)),
961 Token::I64(value) => Ok(CanonicalToken::I64(value)),
962 Token::I128(value) => Ok(CanonicalToken::I128(value)),
963 Token::U8(value) => Ok(CanonicalToken::U8(value)),
964 Token::U16(value) => Ok(CanonicalToken::U16(value)),
965 Token::U32(value) => Ok(CanonicalToken::U32(value)),
966 Token::U64(value) => Ok(CanonicalToken::U64(value)),
967 Token::U128(value) => Ok(CanonicalToken::U128(value)),
968 Token::F32(value) => Ok(CanonicalToken::F32(value)),
969 Token::F64(value) => Ok(CanonicalToken::F64(value)),
970 Token::Char(value) => Ok(CanonicalToken::Char(value)),
971 Token::Str(value) => Ok(CanonicalToken::Str(value)),
972 Token::Bytes(value) => Ok(CanonicalToken::Bytes(value)),
973 Token::None => Ok(CanonicalToken::None),
974 Token::Some => Ok(CanonicalToken::Some),
975 Token::Unit => Ok(CanonicalToken::Unit),
976 Token::UnitStruct { name } => Ok(CanonicalToken::UnitStruct { name }),
977 Token::UnitVariant {
978 name,
979 variant_index,
980 variant,
981 } => Ok(CanonicalToken::UnitVariant {
982 name,
983 variant_index,
984 variant,
985 }),
986 Token::NewtypeStruct { name } => Ok(CanonicalToken::NewtypeStruct { name }),
987 Token::NewtypeVariant {
988 name,
989 variant_index,
990 variant,
991 } => Ok(CanonicalToken::NewtypeVariant {
992 name,
993 variant_index,
994 variant,
995 }),
996 Token::Seq { len } => Ok(CanonicalToken::Seq { len }),
997 Token::SeqEnd => Ok(CanonicalToken::SeqEnd),
998 Token::Tuple { len } => Ok(CanonicalToken::Tuple { len }),
999 Token::TupleEnd => Ok(CanonicalToken::TupleEnd),
1000 Token::TupleStruct { name, len } => Ok(CanonicalToken::TupleStruct { name, len }),
1001 Token::TupleStructEnd => Ok(CanonicalToken::TupleStructEnd),
1002 Token::TupleVariant {
1003 name,
1004 variant_index,
1005 variant,
1006 len,
1007 } => Ok(CanonicalToken::TupleVariant {
1008 name,
1009 variant_index,
1010 variant,
1011 len,
1012 }),
1013 Token::TupleVariantEnd => Ok(CanonicalToken::TupleVariantEnd),
1014 Token::Map { len } => Ok(CanonicalToken::Map { len }),
1015 Token::MapEnd => Ok(CanonicalToken::MapEnd),
1016 Token::Field(value) => Ok(CanonicalToken::Field(value)),
1017 Token::SkippedField(value) => Ok(CanonicalToken::SkippedField(value)),
1018 Token::Struct { name, len } => Ok(CanonicalToken::Struct { name, len }),
1019 Token::StructEnd => Ok(CanonicalToken::StructEnd),
1020 Token::StructVariant {
1021 name,
1022 variant_index,
1023 variant,
1024 len,
1025 } => Ok(CanonicalToken::StructVariant {
1026 name,
1027 variant_index,
1028 variant,
1029 len,
1030 }),
1031 Token::StructVariantEnd => Ok(CanonicalToken::StructVariantEnd),
1032 Token::Unordered(tokens) => Err(UnorderedTokens(tokens)),
1033 }
1034 }
1035}
1036
1037impl From<CanonicalToken> for Token {
1038 fn from(token: CanonicalToken) -> Self {
1039 match token {
1040 CanonicalToken::Bool(value) => Token::Bool(value),
1041 CanonicalToken::I8(value) => Token::I8(value),
1042 CanonicalToken::I16(value) => Token::I16(value),
1043 CanonicalToken::I32(value) => Token::I32(value),
1044 CanonicalToken::I64(value) => Token::I64(value),
1045 CanonicalToken::I128(value) => Token::I128(value),
1046 CanonicalToken::U8(value) => Token::U8(value),
1047 CanonicalToken::U16(value) => Token::U16(value),
1048 CanonicalToken::U32(value) => Token::U32(value),
1049 CanonicalToken::U64(value) => Token::U64(value),
1050 CanonicalToken::U128(value) => Token::U128(value),
1051 CanonicalToken::F32(value) => Token::F32(value),
1052 CanonicalToken::F64(value) => Token::F64(value),
1053 CanonicalToken::Char(value) => Token::Char(value),
1054 CanonicalToken::Str(value) => Token::Str(value),
1055 CanonicalToken::Bytes(value) => Token::Bytes(value),
1056 CanonicalToken::None => Token::None,
1057 CanonicalToken::Some => Token::Some,
1058 CanonicalToken::Unit => Token::Unit,
1059 CanonicalToken::UnitStruct { name } => Token::UnitStruct { name },
1060 CanonicalToken::UnitVariant {
1061 name,
1062 variant_index,
1063 variant,
1064 } => Token::UnitVariant {
1065 name,
1066 variant_index,
1067 variant,
1068 },
1069 CanonicalToken::NewtypeStruct { name } => Token::NewtypeStruct { name },
1070 CanonicalToken::NewtypeVariant {
1071 name,
1072 variant_index,
1073 variant,
1074 } => Token::NewtypeVariant {
1075 name,
1076 variant_index,
1077 variant,
1078 },
1079 CanonicalToken::Seq { len } => Token::Seq { len },
1080 CanonicalToken::SeqEnd => Token::SeqEnd,
1081 CanonicalToken::Tuple { len } => Token::Tuple { len },
1082 CanonicalToken::TupleEnd => Token::TupleEnd,
1083 CanonicalToken::TupleStruct { name, len } => Token::TupleStruct { name, len },
1084 CanonicalToken::TupleStructEnd => Token::TupleStructEnd,
1085 CanonicalToken::TupleVariant {
1086 name,
1087 variant_index,
1088 variant,
1089 len,
1090 } => Token::TupleVariant {
1091 name,
1092 variant_index,
1093 variant,
1094 len,
1095 },
1096 CanonicalToken::TupleVariantEnd => Token::TupleVariantEnd,
1097 CanonicalToken::Map { len } => Token::Map { len },
1098 CanonicalToken::MapEnd => Token::MapEnd,
1099 CanonicalToken::Field(value) => Token::Field(value),
1100 CanonicalToken::SkippedField(value) => Token::SkippedField(value),
1101 CanonicalToken::Struct { name, len } => Token::Struct { name, len },
1102 CanonicalToken::StructEnd => Token::StructEnd,
1103 CanonicalToken::StructVariant {
1104 name,
1105 variant_index,
1106 variant,
1107 len,
1108 } => Token::StructVariant {
1109 name,
1110 variant_index,
1111 variant,
1112 len,
1113 },
1114 CanonicalToken::StructVariantEnd => Token::StructVariantEnd,
1115 }
1116 }
1117}
1118
1119impl<'a> From<&'a mut CanonicalToken> for Unexpected<'a> {
1120 fn from(token: &'a mut CanonicalToken) -> Self {
1121 match token {
1122 CanonicalToken::Bool(v) => Unexpected::Bool(*v),
1123 CanonicalToken::I8(v) => Unexpected::Signed((*v).into()),
1124 CanonicalToken::I16(v) => Unexpected::Signed((*v).into()),
1125 CanonicalToken::I32(v) => Unexpected::Signed((*v).into()),
1126 CanonicalToken::I64(v) => Unexpected::Signed(*v),
1127 CanonicalToken::I128(..) => Unexpected::Other("i128"),
1128 CanonicalToken::U8(v) => Unexpected::Unsigned((*v).into()),
1129 CanonicalToken::U16(v) => Unexpected::Unsigned((*v).into()),
1130 CanonicalToken::U32(v) => Unexpected::Unsigned((*v).into()),
1131 CanonicalToken::U64(v) => Unexpected::Unsigned(*v),
1132 CanonicalToken::U128(..) => Unexpected::Other("u128"),
1133 CanonicalToken::F32(v) => Unexpected::Float((*v).into()),
1134 CanonicalToken::F64(v) => Unexpected::Float(*v),
1135 CanonicalToken::Char(v) => Unexpected::Char(*v),
1136 CanonicalToken::Str(v) => Unexpected::Str(v),
1137 CanonicalToken::Bytes(v) => Unexpected::Bytes(v),
1138 CanonicalToken::Some | CanonicalToken::None => Unexpected::Option,
1139 CanonicalToken::Unit | CanonicalToken::UnitStruct { .. } => Unexpected::Unit,
1140 CanonicalToken::UnitVariant { .. } => Unexpected::UnitVariant,
1141 CanonicalToken::NewtypeStruct { .. } => Unexpected::NewtypeStruct,
1142 CanonicalToken::NewtypeVariant { .. } => Unexpected::NewtypeVariant,
1143 CanonicalToken::Seq { .. } | CanonicalToken::Tuple { .. } => Unexpected::Seq,
1144 CanonicalToken::SeqEnd => Unexpected::Other("SeqEnd"),
1145 CanonicalToken::TupleEnd => Unexpected::Other("TupleEnd"),
1146 CanonicalToken::TupleStruct { .. } => Unexpected::Other("TupleStruct"),
1147 CanonicalToken::TupleStructEnd => Unexpected::Other("TupleStructEnd"),
1148 CanonicalToken::TupleVariant { .. } => Unexpected::TupleVariant,
1149 CanonicalToken::TupleVariantEnd => Unexpected::Other("TupleVariantEnd"),
1150 CanonicalToken::Map { .. } => Unexpected::Map,
1151 CanonicalToken::MapEnd => Unexpected::Other("MapEnd"),
1152 CanonicalToken::Field(..) => Unexpected::Other("Field"),
1153 CanonicalToken::SkippedField(..) => Unexpected::Other("SkippedField"),
1154 CanonicalToken::Struct { .. } => Unexpected::Other("Struct"),
1155 CanonicalToken::StructEnd => Unexpected::Other("StructEnd"),
1156 CanonicalToken::StructVariant { .. } => Unexpected::StructVariant,
1157 CanonicalToken::StructVariantEnd => Unexpected::Other("StructVariantEnd"),
1158 }
1159 }
1160}
1161
1162#[derive(Clone, Debug)]
1214pub struct Tokens(pub(crate) Vec<CanonicalToken>);
1215
1216#[derive(Clone, Debug)]
1217struct Context {
1218 current: slice::Iter<'static, Token>,
1219 remaining: Vec<&'static [Token]>,
1220 #[allow(clippy::struct_field_names)] nested_context: Option<Box<Context>>,
1222}
1223
1224impl Context {
1225 fn new(current: slice::Iter<'static, Token>, remaining: Vec<&'static [Token]>) -> Self {
1227 Self {
1228 current,
1229 remaining,
1230 nested_context: None,
1231 }
1232 }
1233
1234 fn nest(self, mut split: Split) -> Vec<Self> {
1236 for context in &mut split.contexts {
1237 context.nested_context = Some(Box::new(self.clone()));
1238 }
1239 split.contexts
1240 }
1241}
1242
1243impl Iterator for Context {
1244 type Item = &'static Token;
1245
1246 fn next(&mut self) -> Option<Self::Item> {
1247 self.current.next()
1248 }
1249}
1250
1251#[derive(Debug)]
1252struct Split {
1253 contexts: Vec<Context>,
1254}
1255
1256impl Split {
1257 fn search<'a, I>(mut self, mut tokens: I) -> bool
1261 where
1262 I: Iterator<Item = &'a CanonicalToken>,
1263 {
1264 while let Some(canonical_tokens) = self.next() {
1265 if canonical_tokens.is_empty() {
1266 return false;
1268 }
1269 if let Some(token) = tokens.next() {
1270 self.contexts = self
1271 .contexts
1272 .into_iter()
1273 .zip(canonical_tokens)
1274 .filter_map(|(context, canonical_token)| {
1275 if *token == canonical_token {
1276 Some(context)
1277 } else {
1278 None
1279 }
1280 })
1281 .collect();
1282 } else {
1283 return false;
1285 }
1286 }
1287
1288 true
1291 }
1292}
1293
1294impl Iterator for Split {
1295 type Item = Vec<CanonicalToken>;
1301
1302 fn next(&mut self) -> Option<Self::Item> {
1303 if self.contexts.is_empty() {
1304 return Some(Vec::new());
1305 }
1306
1307 let mut result = Vec::with_capacity(self.contexts.len());
1308
1309 let mut index = 0;
1310 while index < self.contexts.len() {
1311 match self.contexts[index]
1312 .next()
1313 .cloned()
1314 .map(CanonicalToken::try_from)
1315 {
1316 Some(Ok(canonical_token)) => {
1317 result.push(canonical_token);
1318 index += 1;
1319 }
1320 Some(Err(unordered_tokens)) => {
1321 let context = self.contexts.swap_remove(index);
1323 if let Ok(split) = unordered_tokens.try_into() {
1324 self.contexts.extend(context.nest(split));
1325 }
1326 }
1327 None => {
1328 let context = self.contexts.swap_remove(index);
1330 if let Ok(split) = Split::try_from(context) {
1331 self.contexts.extend(split.contexts);
1332 }
1333 }
1334 }
1335 }
1336
1337 if result.is_empty() {
1338 None
1340 } else {
1341 Some(result)
1342 }
1343 }
1344}
1345
1346impl<'a> TryFrom<&'a [&'static [Token]]> for Split {
1347 type Error = ();
1348
1349 fn try_from(value: &'a [&'static [Token]]) -> Result<Self, Self::Error> {
1350 if value.is_empty() {
1351 Err(())
1352 } else {
1353 Ok(Self {
1354 contexts: (0..value.len())
1355 .map(|index| {
1356 Context::new(
1357 value[index].iter(),
1358 value
1359 .iter()
1360 .enumerate()
1361 .filter_map(
1362 |(i, tokens)| if i == index { None } else { Some(*tokens) },
1363 )
1364 .collect(),
1365 )
1366 })
1367 .collect(),
1368 })
1369 }
1370 }
1371}
1372
1373impl TryFrom<Context> for Split {
1374 type Error = ();
1375
1376 fn try_from(value: Context) -> Result<Self, Self::Error> {
1377 if let Ok(mut split) = Split::try_from(value.remaining.as_slice()) {
1378 for context in &mut split.contexts {
1379 context.nested_context.clone_from(&value.nested_context);
1380 }
1381 Ok(split)
1382 } else if let Some(nested_context) = value.nested_context {
1383 Ok(Split {
1384 contexts: vec![*nested_context],
1385 })
1386 } else {
1387 Err(())
1388 }
1389 }
1390}
1391
1392impl TryFrom<UnorderedTokens> for Split {
1393 type Error = ();
1394
1395 fn try_from(value: UnorderedTokens) -> Result<Self, Self::Error> {
1396 value.0.try_into()
1397 }
1398}
1399
1400impl<T> PartialEq<T> for Tokens
1401where
1402 for<'a> &'a T: IntoIterator<Item = &'a Token>,
1403{
1404 fn eq(&self, other: &T) -> bool {
1405 let mut self_iter = self.0.iter();
1406
1407 for token in other {
1408 if !match CanonicalToken::try_from(token.clone()) {
1409 Ok(canonical_token) => {
1410 if let Some(self_token) = self_iter.next() {
1411 canonical_token == *self_token
1412 } else {
1413 false
1415 }
1416 }
1417 Err(unordered_tokens) => Split::try_from(unordered_tokens)
1418 .map(|split| split.search(&mut self_iter))
1419 .unwrap_or(true),
1420 } {
1421 return false;
1422 }
1423 }
1424
1425 if self_iter.next().is_some() {
1426 return false;
1428 }
1429
1430 true
1431 }
1432}
1433
1434impl IntoIterator for Tokens {
1435 type Item = Token;
1436 type IntoIter = IntoIter;
1437
1438 fn into_iter(self) -> Self::IntoIter {
1439 IntoIter {
1440 token_iter: self.0.into_iter(),
1441 }
1442 }
1443}
1444
1445pub struct IntoIter {
1452 token_iter: vec::IntoIter<CanonicalToken>,
1453}
1454
1455impl Iterator for IntoIter {
1456 type Item = Token;
1457
1458 fn next(&mut self) -> Option<Self::Item> {
1459 self.token_iter.next().map(From::from)
1460 }
1461}
1462
1463pub(crate) struct OwningIter<'a> {
1467 buf: NonNull<CanonicalToken>,
1471 ptr: *mut CanonicalToken,
1473 end: *mut CanonicalToken,
1475 cap: usize,
1479
1480 lifetime: PhantomData<&'a ()>,
1485}
1486
1487impl OwningIter<'_> {
1488 pub(crate) fn new(tokens: Tokens) -> Self {
1492 let mut tokens = ManuallyDrop::new(tokens);
1493
1494 Self {
1495 buf: unsafe { NonNull::new_unchecked(tokens.0.as_mut_ptr()) },
1497 ptr: tokens.0.as_mut_ptr(),
1498 end: unsafe { tokens.0.as_mut_ptr().add(tokens.0.len()) },
1500 cap: tokens.0.capacity(),
1501
1502 lifetime: PhantomData,
1503 }
1504 }
1505
1506 fn as_slice(&self) -> &[CanonicalToken] {
1508 unsafe {
1511 slice::from_raw_parts(
1512 self.ptr,
1513 #[allow(clippy::cast_sign_loss)]
1514 {
1515 self.end.offset_from(self.ptr) as usize
1516 },
1517 )
1518 }
1519 }
1520}
1521
1522impl<'a> Iterator for OwningIter<'a> {
1523 type Item = &'a mut CanonicalToken;
1524
1525 fn next(&mut self) -> Option<Self::Item> {
1526 if self.ptr == self.end {
1527 None
1528 } else {
1529 let current = self.ptr;
1530 self.ptr = unsafe { self.ptr.add(1) };
1534 Some(unsafe { &mut *current })
1537 }
1538 }
1539}
1540
1541impl Debug for OwningIter<'_> {
1542 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
1543 formatter
1544 .debug_tuple("OwningIter")
1545 .field(&self.as_slice())
1546 .finish()
1547 }
1548}
1549
1550impl Drop for OwningIter<'_> {
1551 fn drop(&mut self) {
1552 unsafe {
1555 Vec::from_raw_parts(
1556 self.buf.as_ptr(),
1557 #[allow(clippy::cast_sign_loss)]
1558 {
1559 self.end.offset_from(self.buf.as_ptr()) as usize
1560 },
1561 self.cap,
1562 )
1563 };
1564 }
1565}
1566
1567#[cfg(test)]
1568mod tests {
1569 use super::{
1570 CanonicalToken,
1571 OwningIter,
1572 Token,
1573 Tokens,
1574 };
1575 use alloc::{
1576 borrow::ToOwned,
1577 format,
1578 vec,
1579 vec::Vec,
1580 };
1581 use claims::{
1582 assert_matches,
1583 assert_none,
1584 assert_some,
1585 assert_some_eq,
1586 };
1587 use serde::de::Unexpected;
1588
1589 #[test]
1590 fn tokens_bool_eq() {
1591 assert_eq!(
1592 Tokens(vec![CanonicalToken::Bool(true)]),
1593 [Token::Bool(true)]
1594 );
1595 }
1596
1597 #[test]
1598 fn tokens_bool_ne() {
1599 assert_ne!(
1600 Tokens(vec![CanonicalToken::Bool(true)]),
1601 [Token::Bool(false)]
1602 );
1603 }
1604
1605 #[test]
1606 fn tokens_variant_ne() {
1607 assert_ne!(Tokens(vec![CanonicalToken::Bool(true)]), [Token::U16(42)]);
1608 }
1609
1610 #[test]
1611 fn tokens_empty_eq() {
1612 assert_eq!(Tokens(vec![]), []);
1613 }
1614
1615 #[test]
1616 fn tokens_multiple_eq() {
1617 assert_eq!(
1618 Tokens(vec![CanonicalToken::Bool(true), CanonicalToken::U8(42)]),
1619 [Token::Bool(true), Token::U8(42)]
1620 );
1621 }
1622
1623 #[test]
1624 fn tokens_multiple_ne_values() {
1625 assert_ne!(
1626 Tokens(vec![CanonicalToken::Bool(true), CanonicalToken::U8(42)]),
1627 [Token::Bool(false), Token::U8(42)]
1628 );
1629 }
1630
1631 #[test]
1632 fn tokens_multiple_ne_shorter() {
1633 assert_ne!(
1634 Tokens(vec![CanonicalToken::Bool(true), CanonicalToken::U8(42)]),
1635 [Token::Bool(true)]
1636 );
1637 }
1638
1639 #[test]
1640 fn tokens_multiple_ne_longer() {
1641 assert_ne!(
1642 Tokens(vec![CanonicalToken::Bool(true), CanonicalToken::U8(42)]),
1643 [Token::Bool(true), Token::U8(42), Token::U8(42)]
1644 );
1645 }
1646
1647 #[test]
1648 fn tokens_unordered_eq_same_order() {
1649 assert_eq!(
1650 Tokens(vec![CanonicalToken::Bool(true), CanonicalToken::U8(42)]),
1651 [Token::Unordered(&[&[Token::Bool(true)], &[Token::U8(42)]])],
1652 );
1653 }
1654
1655 #[test]
1656 fn tokens_unordered_eq_different_order() {
1657 assert_eq!(
1658 Tokens(vec![CanonicalToken::U8(42), CanonicalToken::Bool(true)]),
1659 [Token::Unordered(&[&[Token::Bool(true)], &[Token::U8(42)]])],
1660 );
1661 }
1662
1663 #[test]
1664 fn tokens_unordered_eq_within_other_tokens() {
1665 assert_eq!(
1666 Tokens(vec![
1667 CanonicalToken::Char('a'),
1668 CanonicalToken::U8(42),
1669 CanonicalToken::Bool(true),
1670 CanonicalToken::I16(-42)
1671 ]),
1672 [
1673 Token::Char('a'),
1674 Token::Unordered(&[&[Token::Bool(true)], &[Token::U8(42)]]),
1675 Token::I16(-42)
1676 ],
1677 );
1678 }
1679
1680 #[test]
1681 fn tokens_unordered_eq_multiple_tokens() {
1682 assert_eq!(
1683 Tokens(vec![
1684 CanonicalToken::U8(42),
1685 CanonicalToken::Bool(true),
1686 CanonicalToken::Char('a')
1687 ]),
1688 [Token::Unordered(&[
1689 &[Token::Bool(true), Token::Char('a')],
1690 &[Token::U8(42)]
1691 ])],
1692 );
1693 }
1694
1695 #[test]
1696 fn tokens_unordered_ne_empty() {
1697 assert_ne!(
1698 Tokens(vec![CanonicalToken::Bool(true)]),
1699 [Token::Unordered(&[])],
1700 );
1701 }
1702
1703 #[test]
1704 fn tokens_unordered_ne_variant() {
1705 assert_ne!(
1706 Tokens(vec![CanonicalToken::Bool(true)]),
1707 [Token::Unordered(&[&[Token::I8(42)]])],
1708 );
1709 }
1710
1711 #[test]
1712 fn tokens_unordered_ne_value() {
1713 assert_ne!(
1714 Tokens(vec![CanonicalToken::Bool(true)]),
1715 [Token::Unordered(&[&[Token::Bool(false)]])],
1716 );
1717 }
1718
1719 #[test]
1720 fn tokens_unordered_nested() {
1721 assert_eq!(
1722 Tokens(vec![
1723 CanonicalToken::Unit,
1724 CanonicalToken::U8(4),
1725 CanonicalToken::U8(3),
1726 CanonicalToken::U8(1),
1727 CanonicalToken::U8(2),
1728 CanonicalToken::Bool(true)
1729 ]),
1730 [Token::Unordered(&[
1731 &[Token::Bool(true)],
1732 &[Token::Unordered(&[
1733 &[Token::U8(1), Token::U8(2)],
1734 &[Token::U8(3)],
1735 ])],
1736 &[Token::Unit, Token::U8(4)],
1737 ])]
1738 );
1739 }
1740
1741 #[test]
1742 fn tokens_unordered_empty() {
1743 assert_eq!(
1744 Tokens(vec![CanonicalToken::Unit,]),
1745 [Token::Unordered(&[]), Token::Unit]
1746 );
1747 }
1748
1749 #[test]
1750 fn tokens_unordered_empty_nested() {
1751 assert_eq!(
1752 Tokens(vec![CanonicalToken::Unit,]),
1753 [Token::Unordered(&[&[Token::Unordered(&[])]]), Token::Unit]
1754 );
1755 }
1756
1757 #[test]
1758 fn tokens_unordered_empty_at_end() {
1759 assert_eq!(
1760 Tokens(vec![CanonicalToken::Unit,]),
1761 [Token::Unit, Token::Unordered(&[])]
1762 );
1763 }
1764
1765 #[test]
1766 fn tokens_unordered_nonempty_at_end() {
1767 assert_ne!(
1768 Tokens(vec![CanonicalToken::Unit,]),
1769 [Token::Unit, Token::Unordered(&[&[Token::Unit]])]
1770 );
1771 }
1772
1773 #[test]
1774 fn tokens_end_within_unordered() {
1775 assert_ne!(
1776 Tokens(vec![CanonicalToken::Unit,]),
1777 [Token::Unordered(&[&[Token::Unit,], &[Token::Unit]])]
1778 );
1779 }
1780
1781 #[test]
1782 fn tokens_end_within_unordered_more_tokens() {
1783 assert_ne!(
1784 Tokens(vec![CanonicalToken::Unit,]),
1785 [Token::Unordered(&[&[Token::Unit, Token::Unit]])]
1786 );
1787 }
1788
1789 #[test]
1790 fn tokens_end_within_unordered_nested_empty() {
1791 assert_eq!(
1792 Tokens(vec![CanonicalToken::Unit,]),
1793 [Token::Unordered(&[&[Token::Unit, Token::Unordered(&[])]])]
1794 );
1795 }
1796
1797 #[test]
1798 fn tokens_end_within_unordered_nested_nonempty() {
1799 assert_ne!(
1800 Tokens(vec![CanonicalToken::Unit,]),
1801 [Token::Unordered(&[&[
1802 Token::Unit,
1803 Token::Unordered(&[&[Token::Unit, Token::Unit], &[Token::Unit]])
1804 ]])]
1805 );
1806 }
1807
1808 #[test]
1809 fn token_from_canonical_token_bool() {
1810 assert_matches!(Token::from(CanonicalToken::Bool(true)), Token::Bool(true))
1811 }
1812
1813 #[test]
1814 fn token_from_canonical_token_i8() {
1815 assert_matches!(Token::from(CanonicalToken::I8(42)), Token::I8(42))
1816 }
1817
1818 #[test]
1819 fn token_from_canonical_token_i16() {
1820 assert_matches!(Token::from(CanonicalToken::I16(42)), Token::I16(42))
1821 }
1822
1823 #[test]
1824 fn token_from_canonical_token_i32() {
1825 assert_matches!(Token::from(CanonicalToken::I32(42)), Token::I32(42))
1826 }
1827
1828 #[test]
1829 fn token_from_canonical_token_i64() {
1830 assert_matches!(Token::from(CanonicalToken::I64(42)), Token::I64(42))
1831 }
1832
1833 #[test]
1834 fn token_from_canonical_token_i128() {
1835 assert_matches!(Token::from(CanonicalToken::I128(42)), Token::I128(42))
1836 }
1837
1838 #[test]
1839 fn token_from_canonical_token_u8() {
1840 assert_matches!(Token::from(CanonicalToken::U8(42)), Token::U8(42))
1841 }
1842
1843 #[test]
1844 fn token_from_canonical_token_u16() {
1845 assert_matches!(Token::from(CanonicalToken::U16(42)), Token::U16(42))
1846 }
1847
1848 #[test]
1849 fn token_from_canonical_token_u32() {
1850 assert_matches!(Token::from(CanonicalToken::U32(42)), Token::U32(42))
1851 }
1852
1853 #[test]
1854 fn token_from_canonical_token_u64() {
1855 assert_matches!(Token::from(CanonicalToken::U64(42)), Token::U64(42))
1856 }
1857
1858 #[test]
1859 fn token_from_canonical_token_u128() {
1860 assert_matches!(Token::from(CanonicalToken::U128(42)), Token::U128(42))
1861 }
1862
1863 #[test]
1864 fn token_from_canonical_token_f32() {
1865 assert_matches!(Token::from(CanonicalToken::F32(42.9)), Token::F32(_))
1866 }
1867
1868 #[test]
1869 fn token_from_canonical_token_f64() {
1870 assert_matches!(Token::from(CanonicalToken::F64(42.9)), Token::F64(_))
1871 }
1872
1873 #[test]
1874 fn token_from_canonical_token_char() {
1875 assert_matches!(Token::from(CanonicalToken::Char('a')), Token::Char('a'))
1876 }
1877
1878 #[test]
1879 fn token_from_canonical_token_str() {
1880 assert_matches!(
1881 Token::from(CanonicalToken::Str("foo".to_owned())),
1882 Token::Str(_)
1883 )
1884 }
1885
1886 #[test]
1887 fn token_from_canonical_token_bytes() {
1888 assert_matches!(
1889 Token::from(CanonicalToken::Bytes(b"foo".to_vec())),
1890 Token::Bytes(_)
1891 )
1892 }
1893
1894 #[test]
1895 fn token_from_canonical_token_none() {
1896 assert_matches!(Token::from(CanonicalToken::None), Token::None)
1897 }
1898
1899 #[test]
1900 fn token_from_canonical_token_some() {
1901 assert_matches!(Token::from(CanonicalToken::Some), Token::Some)
1902 }
1903
1904 #[test]
1905 fn token_from_canonical_token_unit() {
1906 assert_matches!(Token::from(CanonicalToken::Unit), Token::Unit)
1907 }
1908
1909 #[test]
1910 fn token_from_canonical_token_unit_struct() {
1911 assert_matches!(
1912 Token::from(CanonicalToken::UnitStruct { name: "foo" }),
1913 Token::UnitStruct { name: "foo" }
1914 )
1915 }
1916
1917 #[test]
1918 fn token_from_canonical_token_unit_variant() {
1919 assert_matches!(
1920 Token::from(CanonicalToken::UnitVariant {
1921 name: "foo",
1922 variant_index: 42,
1923 variant: "bar"
1924 }),
1925 Token::UnitVariant {
1926 name: "foo",
1927 variant_index: 42,
1928 variant: "bar"
1929 }
1930 )
1931 }
1932
1933 #[test]
1934 fn token_from_canonical_token_newtype_struct() {
1935 assert_matches!(
1936 Token::from(CanonicalToken::NewtypeStruct { name: "foo" }),
1937 Token::NewtypeStruct { name: "foo" }
1938 )
1939 }
1940
1941 #[test]
1942 fn token_from_canonical_token_newtype_variant() {
1943 assert_matches!(
1944 Token::from(CanonicalToken::NewtypeVariant {
1945 name: "foo",
1946 variant_index: 42,
1947 variant: "bar"
1948 }),
1949 Token::NewtypeVariant {
1950 name: "foo",
1951 variant_index: 42,
1952 variant: "bar"
1953 }
1954 )
1955 }
1956
1957 #[test]
1958 fn token_from_canonical_token_seq() {
1959 assert_matches!(
1960 Token::from(CanonicalToken::Seq { len: Some(42) }),
1961 Token::Seq { len: Some(42) }
1962 )
1963 }
1964
1965 #[test]
1966 fn token_from_canonical_token_seq_end() {
1967 assert_matches!(Token::from(CanonicalToken::SeqEnd), Token::SeqEnd)
1968 }
1969
1970 #[test]
1971 fn token_from_canonical_token_tuple() {
1972 assert_matches!(
1973 Token::from(CanonicalToken::Tuple { len: 42 }),
1974 Token::Tuple { len: 42 }
1975 )
1976 }
1977
1978 #[test]
1979 fn token_from_canonical_token_tuple_end() {
1980 assert_matches!(Token::from(CanonicalToken::TupleEnd), Token::TupleEnd)
1981 }
1982
1983 #[test]
1984 fn token_from_canonical_token_tuple_struct() {
1985 assert_matches!(
1986 Token::from(CanonicalToken::TupleStruct {
1987 name: "foo",
1988 len: 42
1989 }),
1990 Token::TupleStruct {
1991 name: "foo",
1992 len: 42
1993 }
1994 )
1995 }
1996
1997 #[test]
1998 fn token_from_canonical_token_tuple_struct_end() {
1999 assert_matches!(
2000 Token::from(CanonicalToken::TupleStructEnd),
2001 Token::TupleStructEnd
2002 )
2003 }
2004
2005 #[test]
2006 fn token_from_canonical_token_tuple_variant() {
2007 assert_matches!(
2008 Token::from(CanonicalToken::TupleVariant {
2009 name: "foo",
2010 variant_index: 42,
2011 variant: "bar",
2012 len: 42
2013 }),
2014 Token::TupleVariant {
2015 name: "foo",
2016 variant_index: 42,
2017 variant: "bar",
2018 len: 42
2019 }
2020 )
2021 }
2022
2023 #[test]
2024 fn token_from_canonical_token_tuple_variant_end() {
2025 assert_matches!(
2026 Token::from(CanonicalToken::TupleVariantEnd),
2027 Token::TupleVariantEnd
2028 )
2029 }
2030
2031 #[test]
2032 fn token_from_canonical_token_map() {
2033 assert_matches!(
2034 Token::from(CanonicalToken::Map { len: Some(42) }),
2035 Token::Map { len: Some(42) }
2036 )
2037 }
2038
2039 #[test]
2040 fn token_from_canonical_token_map_end() {
2041 assert_matches!(Token::from(CanonicalToken::MapEnd), Token::MapEnd)
2042 }
2043
2044 #[test]
2045 fn token_from_canonical_token_field() {
2046 assert_matches!(
2047 Token::from(CanonicalToken::Field("foo")),
2048 Token::Field("foo")
2049 )
2050 }
2051
2052 #[test]
2053 fn token_from_canonical_token_skipped_field() {
2054 assert_matches!(
2055 Token::from(CanonicalToken::SkippedField("foo")),
2056 Token::SkippedField("foo")
2057 )
2058 }
2059
2060 #[test]
2061 fn token_from_canonical_token_struct() {
2062 assert_matches!(
2063 Token::from(CanonicalToken::Struct {
2064 name: "foo",
2065 len: 42
2066 }),
2067 Token::Struct {
2068 name: "foo",
2069 len: 42
2070 }
2071 )
2072 }
2073
2074 #[test]
2075 fn token_from_canonical_token_struct_end() {
2076 assert_matches!(Token::from(CanonicalToken::StructEnd), Token::StructEnd)
2077 }
2078
2079 #[test]
2080 fn token_from_canonical_token_struct_variant() {
2081 assert_matches!(
2082 Token::from(CanonicalToken::StructVariant {
2083 name: "foo",
2084 variant_index: 42,
2085 variant: "bar",
2086 len: 42
2087 }),
2088 Token::StructVariant {
2089 name: "foo",
2090 variant_index: 42,
2091 variant: "bar",
2092 len: 42
2093 }
2094 )
2095 }
2096
2097 #[test]
2098 fn token_from_canonical_token_struct_variant_end() {
2099 assert_matches!(
2100 Token::from(CanonicalToken::StructVariantEnd),
2101 Token::StructVariantEnd
2102 )
2103 }
2104
2105 #[test]
2106 fn unexpected_from_canonical_token_bool() {
2107 assert_eq!(
2108 Unexpected::from(&mut CanonicalToken::Bool(true)),
2109 Unexpected::Bool(true)
2110 )
2111 }
2112
2113 #[test]
2114 fn unexpected_from_canonical_token_i8() {
2115 assert_eq!(
2116 Unexpected::from(&mut CanonicalToken::I8(42)),
2117 Unexpected::Signed(42)
2118 )
2119 }
2120
2121 #[test]
2122 fn unexpected_from_canonical_token_i16() {
2123 assert_eq!(
2124 Unexpected::from(&mut CanonicalToken::I16(42)),
2125 Unexpected::Signed(42)
2126 )
2127 }
2128
2129 #[test]
2130 fn unexpected_from_canonical_token_i32() {
2131 assert_eq!(
2132 Unexpected::from(&mut CanonicalToken::I32(42)),
2133 Unexpected::Signed(42)
2134 )
2135 }
2136
2137 #[test]
2138 fn unexpected_from_canonical_token_i64() {
2139 assert_eq!(
2140 Unexpected::from(&mut CanonicalToken::I64(42)),
2141 Unexpected::Signed(42)
2142 )
2143 }
2144
2145 #[test]
2146 fn unexpected_from_canonical_token_i128() {
2147 assert_eq!(
2148 Unexpected::from(&mut CanonicalToken::I128(42)),
2149 Unexpected::Other("i128")
2150 )
2151 }
2152
2153 #[test]
2154 fn unexpected_from_canonical_token_u8() {
2155 assert_eq!(
2156 Unexpected::from(&mut CanonicalToken::U8(42)),
2157 Unexpected::Unsigned(42)
2158 )
2159 }
2160
2161 #[test]
2162 fn unexpected_from_canonical_token_u16() {
2163 assert_eq!(
2164 Unexpected::from(&mut CanonicalToken::U16(42)),
2165 Unexpected::Unsigned(42)
2166 )
2167 }
2168
2169 #[test]
2170 fn unexpected_from_canonical_token_u32() {
2171 assert_eq!(
2172 Unexpected::from(&mut CanonicalToken::U32(42)),
2173 Unexpected::Unsigned(42)
2174 )
2175 }
2176
2177 #[test]
2178 fn unexpected_from_canonical_token_u64() {
2179 assert_eq!(
2180 Unexpected::from(&mut CanonicalToken::U64(42)),
2181 Unexpected::Unsigned(42)
2182 )
2183 }
2184
2185 #[test]
2186 fn unexpected_from_canonical_token_u128() {
2187 assert_eq!(
2188 Unexpected::from(&mut CanonicalToken::U128(42)),
2189 Unexpected::Other("u128")
2190 )
2191 }
2192
2193 #[test]
2194 fn unexpected_from_canonical_token_f32() {
2195 assert_eq!(
2196 Unexpected::from(&mut CanonicalToken::F32(42.)),
2197 Unexpected::Float(42.)
2198 )
2199 }
2200
2201 #[test]
2202 fn unexpected_from_canonical_token_f64() {
2203 assert_eq!(
2204 Unexpected::from(&mut CanonicalToken::F64(42.)),
2205 Unexpected::Float(42.)
2206 )
2207 }
2208
2209 #[test]
2210 fn unexpected_from_canonical_token_char() {
2211 assert_eq!(
2212 Unexpected::from(&mut CanonicalToken::Char('a')),
2213 Unexpected::Char('a')
2214 )
2215 }
2216
2217 #[test]
2218 fn unexpected_from_canonical_token_str() {
2219 assert_eq!(
2220 Unexpected::from(&mut CanonicalToken::Str("foo".to_owned())),
2221 Unexpected::Str("foo")
2222 )
2223 }
2224
2225 #[test]
2226 fn unexpected_from_canonical_token_bytes() {
2227 assert_eq!(
2228 Unexpected::from(&mut CanonicalToken::Bytes(b"foo".to_vec())),
2229 Unexpected::Bytes(b"foo")
2230 )
2231 }
2232
2233 #[test]
2234 fn unexpected_from_canonical_token_some() {
2235 assert_eq!(
2236 Unexpected::from(&mut CanonicalToken::Some),
2237 Unexpected::Option
2238 )
2239 }
2240
2241 #[test]
2242 fn unexpected_from_canonical_token_none() {
2243 assert_eq!(
2244 Unexpected::from(&mut CanonicalToken::None),
2245 Unexpected::Option
2246 )
2247 }
2248
2249 #[test]
2250 fn unexpected_from_canonical_token_unit() {
2251 assert_eq!(
2252 Unexpected::from(&mut CanonicalToken::Unit),
2253 Unexpected::Unit
2254 )
2255 }
2256
2257 #[test]
2258 fn unexpected_from_canonical_token_unit_struct() {
2259 assert_eq!(
2260 Unexpected::from(&mut CanonicalToken::UnitStruct { name: "foo" }),
2261 Unexpected::Unit
2262 )
2263 }
2264
2265 #[test]
2266 fn unexpected_from_canonical_token_unit_variant() {
2267 assert_eq!(
2268 Unexpected::from(&mut CanonicalToken::UnitVariant {
2269 name: "foo",
2270 variant_index: 0,
2271 variant: "bar"
2272 }),
2273 Unexpected::UnitVariant
2274 )
2275 }
2276
2277 #[test]
2278 fn unexpected_from_canonical_token_newtype_struct() {
2279 assert_eq!(
2280 Unexpected::from(&mut CanonicalToken::NewtypeStruct { name: "foo" }),
2281 Unexpected::NewtypeStruct
2282 )
2283 }
2284
2285 #[test]
2286 fn unexpected_from_canonical_token_newtype_variant() {
2287 assert_eq!(
2288 Unexpected::from(&mut CanonicalToken::NewtypeVariant {
2289 name: "foo",
2290 variant_index: 0,
2291 variant: "bar"
2292 }),
2293 Unexpected::NewtypeVariant
2294 )
2295 }
2296
2297 #[test]
2298 fn unexpected_from_canonical_token_seq() {
2299 assert_eq!(
2300 Unexpected::from(&mut CanonicalToken::Seq { len: None }),
2301 Unexpected::Seq
2302 )
2303 }
2304
2305 #[test]
2306 fn unexpected_from_canonical_token_tuple() {
2307 assert_eq!(
2308 Unexpected::from(&mut CanonicalToken::Tuple { len: 0 }),
2309 Unexpected::Seq
2310 )
2311 }
2312
2313 #[test]
2314 fn unexpected_from_canonical_token_seq_end() {
2315 assert_eq!(
2316 Unexpected::from(&mut CanonicalToken::SeqEnd),
2317 Unexpected::Other("SeqEnd")
2318 )
2319 }
2320
2321 #[test]
2322 fn unexpected_from_canonical_token_tuple_end() {
2323 assert_eq!(
2324 Unexpected::from(&mut CanonicalToken::TupleEnd),
2325 Unexpected::Other("TupleEnd")
2326 )
2327 }
2328
2329 #[test]
2330 fn unexpected_from_canonical_token_tuple_struct() {
2331 assert_eq!(
2332 Unexpected::from(&mut CanonicalToken::TupleStruct {
2333 name: "foo",
2334 len: 0
2335 }),
2336 Unexpected::Other("TupleStruct")
2337 )
2338 }
2339
2340 #[test]
2341 fn unexpected_from_canonical_token_tuple_struct_end() {
2342 assert_eq!(
2343 Unexpected::from(&mut CanonicalToken::TupleStructEnd),
2344 Unexpected::Other("TupleStructEnd")
2345 )
2346 }
2347
2348 #[test]
2349 fn unexpected_from_canonical_token_tuple_variant() {
2350 assert_eq!(
2351 Unexpected::from(&mut CanonicalToken::TupleVariant {
2352 name: "foo",
2353 variant_index: 0,
2354 variant: "bar",
2355 len: 0
2356 }),
2357 Unexpected::TupleVariant
2358 )
2359 }
2360
2361 #[test]
2362 fn unexpected_from_canonical_token_tuple_variant_end() {
2363 assert_eq!(
2364 Unexpected::from(&mut CanonicalToken::TupleVariantEnd),
2365 Unexpected::Other("TupleVariantEnd")
2366 )
2367 }
2368
2369 #[test]
2370 fn unexpected_from_canonical_token_map() {
2371 assert_eq!(
2372 Unexpected::from(&mut CanonicalToken::Map { len: None }),
2373 Unexpected::Map
2374 )
2375 }
2376
2377 #[test]
2378 fn unexpected_from_canonical_token_map_end() {
2379 assert_eq!(
2380 Unexpected::from(&mut CanonicalToken::MapEnd),
2381 Unexpected::Other("MapEnd")
2382 )
2383 }
2384
2385 #[test]
2386 fn unexpected_from_canonical_token_field() {
2387 assert_eq!(
2388 Unexpected::from(&mut CanonicalToken::Field("foo")),
2389 Unexpected::Other("Field")
2390 )
2391 }
2392
2393 #[test]
2394 fn unexpected_from_canonical_token_skipped_field() {
2395 assert_eq!(
2396 Unexpected::from(&mut CanonicalToken::SkippedField("foo")),
2397 Unexpected::Other("SkippedField")
2398 )
2399 }
2400
2401 #[test]
2402 fn unexpected_from_canonical_token_struct() {
2403 assert_eq!(
2404 Unexpected::from(&mut CanonicalToken::Struct {
2405 name: "foo",
2406 len: 0
2407 }),
2408 Unexpected::Other("Struct")
2409 )
2410 }
2411
2412 #[test]
2413 fn unexpected_from_canonical_token_struct_end() {
2414 assert_eq!(
2415 Unexpected::from(&mut CanonicalToken::StructEnd),
2416 Unexpected::Other("StructEnd")
2417 )
2418 }
2419
2420 #[test]
2421 fn unexpected_from_canonical_token_struct_variant() {
2422 assert_eq!(
2423 Unexpected::from(&mut CanonicalToken::StructVariant {
2424 name: "foo",
2425 variant_index: 0,
2426 variant: "bar",
2427 len: 0
2428 }),
2429 Unexpected::StructVariant
2430 )
2431 }
2432
2433 #[test]
2434 fn unexpected_from_canonical_token_struct_variant_end() {
2435 assert_eq!(
2436 Unexpected::from(&mut CanonicalToken::StructVariantEnd),
2437 Unexpected::Other("StructVariantEnd")
2438 )
2439 }
2440
2441 #[test]
2442 fn owning_iter_empty() {
2443 let mut iter = OwningIter::new(Tokens(Vec::new()));
2444
2445 assert_none!(iter.next());
2446 }
2447
2448 #[test]
2449 fn owning_iter_one_token() {
2450 let mut iter = OwningIter::new(Tokens(vec![CanonicalToken::Bool(true)]));
2451
2452 assert_some_eq!(iter.next(), &mut CanonicalToken::Bool(true));
2453 assert_none!(iter.next());
2454 }
2455
2456 #[test]
2457 fn owning_iter_multiple_tokens() {
2458 let mut iter = OwningIter::new(Tokens(vec![
2459 CanonicalToken::Bool(true),
2460 CanonicalToken::U64(42),
2461 CanonicalToken::Str("foo".to_owned()),
2462 ]));
2463
2464 assert_some_eq!(iter.next(), &mut CanonicalToken::Bool(true));
2465 assert_some_eq!(iter.next(), &mut CanonicalToken::U64(42));
2466 assert_some_eq!(iter.next(), &mut CanonicalToken::Str("foo".to_owned()));
2467 assert_none!(iter.next());
2468 }
2469
2470 #[test]
2471 fn owning_iter_empty_debug() {
2472 let iter = OwningIter::new(Tokens(Vec::new()));
2473
2474 assert_eq!(format!("{:?}", iter), "OwningIter([])")
2475 }
2476
2477 #[test]
2478 fn owning_iter_uniterated_debug() {
2479 let iter = OwningIter::new(Tokens(vec![
2480 CanonicalToken::Bool(true),
2481 CanonicalToken::U64(42),
2482 CanonicalToken::Str("foo".to_owned()),
2483 ]));
2484
2485 assert_eq!(
2486 format!("{:?}", iter),
2487 "OwningIter([Bool(true), U64(42), Str(\"foo\")])"
2488 )
2489 }
2490
2491 #[test]
2492 fn owning_iter_partially_iterated_debug() {
2493 let mut iter = OwningIter::new(Tokens(vec![
2494 CanonicalToken::Bool(true),
2495 CanonicalToken::U64(42),
2496 CanonicalToken::Str("foo".to_owned()),
2497 ]));
2498
2499 assert_some!(iter.next());
2500
2501 assert_eq!(format!("{:?}", iter), "OwningIter([U64(42), Str(\"foo\")])")
2502 }
2503
2504 #[test]
2505 fn owning_iter_fully_iterated_debug() {
2506 let mut iter = OwningIter::new(Tokens(vec![
2507 CanonicalToken::Bool(true),
2508 CanonicalToken::U64(42),
2509 CanonicalToken::Str("foo".to_owned()),
2510 ]));
2511
2512 assert_some!(iter.next());
2513 assert_some!(iter.next());
2514 assert_some!(iter.next());
2515
2516 assert_eq!(format!("{:?}", iter), "OwningIter([])")
2517 }
2518}