macro_rules! assert_string_enum_lockstep {
($ty:ty, [$($variant:expr),+ $(,)?]) => {{
$({
let variant: $ty = $variant;
let expected = variant.as_str();
match ::serde_json::to_value(&variant) {
Ok(serialized) => ::std::assert_eq!(
serialized,
::serde_json::json!(expected),
"serde wire form drifted from as_str() for {variant:?}"
),
Err(error) => panic!("enum failed to serialize for {variant:?}: {error}"),
}
match <$ty>::parse(expected) {
Some(parsed) => ::std::assert_eq!(
parsed,
variant,
"parse() drifted from as_str() for {variant:?}"
),
None => panic!("parse() rejected as_str() output {expected:?} for {variant:?}"),
}
})+
}};
}
pub(crate) use assert_string_enum_lockstep;