mirror of
https://github.com/serde-rs/serde.git
synced 2025-10-02 15:25:38 +00:00
Print the contents of the expected token when a serialize assert fails
Before ``` expected Token::Str but serialized as Str(“F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E4") ``` After ``` expected Token::Str(“f9168c5e-ceb2-4faa-b6bf-329bf39fa1e4”) but serialized as Str(“F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E4") ```
This commit is contained in:
parent
aad7a7987f
commit
ce81288235
@ -40,25 +40,43 @@ impl<'a> Serializer<'a> {
|
|||||||
|
|
||||||
macro_rules! assert_next_token {
|
macro_rules! assert_next_token {
|
||||||
($ser:expr, $expected:ident) => {
|
($ser:expr, $expected:ident) => {
|
||||||
assert_next_token!($ser, $expected, Token::$expected, true);
|
assert_next_token!($ser, stringify!($expected), Token::$expected, true);
|
||||||
};
|
};
|
||||||
($ser:expr, $expected:ident($v:expr)) => {
|
($ser:expr, $expected:ident($v:expr)) => {
|
||||||
assert_next_token!($ser, $expected, Token::$expected(v), v == $v);
|
assert_next_token!(
|
||||||
|
$ser,
|
||||||
|
format_args!("{}({:?})", stringify!($expected), $v),
|
||||||
|
Token::$expected(v),
|
||||||
|
v == $v
|
||||||
|
);
|
||||||
};
|
};
|
||||||
($ser:expr, $expected:ident { $($k:ident),* }) => {
|
($ser:expr, $expected:ident { $($k:ident),* }) => {
|
||||||
let compare = ($($k,)*);
|
let compare = ($($k,)*);
|
||||||
assert_next_token!($ser, $expected, Token::$expected { $($k),* }, ($($k,)*) == compare);
|
let field_format = || {
|
||||||
|
use std::fmt::Write;
|
||||||
|
let mut buffer = String::new();
|
||||||
|
$(
|
||||||
|
write!(&mut buffer, "{}: {:?}, ", stringify!($k), $k).unwrap();
|
||||||
|
)*
|
||||||
|
buffer
|
||||||
|
};
|
||||||
|
assert_next_token!(
|
||||||
|
$ser,
|
||||||
|
format_args!("{} {{ {}}}", stringify!($expected), field_format()),
|
||||||
|
Token::$expected { $($k),* },
|
||||||
|
($($k,)*) == compare
|
||||||
|
);
|
||||||
};
|
};
|
||||||
($ser:expr, $expected:ident, $pat:pat, $guard:expr) => {
|
($ser:expr, $expected:expr, $pat:pat, $guard:expr) => {
|
||||||
match $ser.next_token() {
|
match $ser.next_token() {
|
||||||
Some($pat) if $guard => {}
|
Some($pat) if $guard => {}
|
||||||
Some(other) => {
|
Some(other) => {
|
||||||
panic!("expected Token::{} but serialized as {}",
|
panic!("expected Token::{} but serialized as {}",
|
||||||
stringify!($expected), other);
|
$expected, other);
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
panic!("expected Token::{} after end of serialized tokens",
|
panic!("expected Token::{} after end of serialized tokens",
|
||||||
stringify!($expected));
|
$expected);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user