More typical TryFrom usage for test

This commit is contained in:
David Tolnay 2019-07-17 12:30:21 -07:00
parent cf70c3fb05
commit b941c63a53
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82

View File

@ -1590,20 +1590,20 @@ impl From<Option<u32>> for EnumToU32 {
} }
#[derive(Clone, Deserialize, PartialEq, Debug)] #[derive(Clone, Deserialize, PartialEq, Debug)]
#[serde(try_from = "EnumToU32")] #[serde(try_from = "u32")]
struct StructTryFromEnum(Option<u32>); enum TryFromU32 {
One,
Two,
}
impl TryFrom<EnumToU32> for StructTryFromEnum { impl TryFrom<u32> for TryFromU32 {
type Error = String; type Error = String;
fn try_from(value: EnumToU32) -> Result<Self, Self::Error> { fn try_from(value: u32) -> Result<Self, Self::Error> {
println!("{:?}", value);
match value { match value {
EnumToU32::One => Ok(StructTryFromEnum(Some(1))), 1 => Ok(TryFromU32::One),
EnumToU32::Two => Ok(StructTryFromEnum(Some(2))), 2 => Ok(TryFromU32::Two),
EnumToU32::Three => Ok(StructTryFromEnum(Some(3))), _ => Err("out of range".to_owned()),
EnumToU32::Four => Ok(StructTryFromEnum(Some(4))),
_ => Err("out of range".into()),
} }
} }
} }
@ -1616,12 +1616,8 @@ fn test_from_into_traits() {
assert_ser_tokens::<StructFromEnum>(&StructFromEnum(Some(5)), &[Token::None]); assert_ser_tokens::<StructFromEnum>(&StructFromEnum(Some(5)), &[Token::None]);
assert_ser_tokens::<StructFromEnum>(&StructFromEnum(None), &[Token::None]); assert_ser_tokens::<StructFromEnum>(&StructFromEnum(None), &[Token::None]);
assert_de_tokens::<StructFromEnum>(&StructFromEnum(Some(2)), &[Token::Some, Token::U32(2)]); assert_de_tokens::<StructFromEnum>(&StructFromEnum(Some(2)), &[Token::Some, Token::U32(2)]);
assert_de_tokens::<StructTryFromEnum>( assert_de_tokens::<TryFromU32>(&TryFromU32::Two, &[Token::U32(2)]);
&StructTryFromEnum(Some(2)), assert_de_tokens_error::<TryFromU32>(&[Token::U32(5)], "out of range");
&[Token::Some, Token::U32(2)],
);
assert_de_tokens_error::<StructTryFromEnum>(&[Token::Some, Token::U32(5)], "out of range");
assert_de_tokens_error::<StructTryFromEnum>(&[Token::None], "out of range");
} }
#[test] #[test]