Skip to content

Commit 7aa0453

Browse files
committed
Merge pull request 2475 from Baptistemontan/master
2 parents 09b78b2 + c604bdb commit 7aa0453

File tree

2 files changed

+600
-2
lines changed

2 files changed

+600
-2
lines changed

serde/src/private/de.rs

+40-2
Original file line numberDiff line numberDiff line change
@@ -894,7 +894,7 @@ mod content {
894894
where
895895
D: Deserializer<'de>,
896896
{
897-
deserializer.deserialize_str(self)
897+
deserializer.deserialize_identifier(self)
898898
}
899899
}
900900

@@ -905,6 +905,20 @@ mod content {
905905
write!(formatter, "{:?} or {:?}", self.tag, self.content)
906906
}
907907

908+
fn visit_u64<E>(self, field_index: u64) -> Result<Self::Value, E>
909+
where
910+
E: de::Error,
911+
{
912+
match field_index {
913+
0 => Ok(TagOrContentField::Tag),
914+
1 => Ok(TagOrContentField::Content),
915+
_ => Err(de::Error::invalid_value(
916+
Unexpected::Unsigned(field_index),
917+
&self,
918+
)),
919+
}
920+
}
921+
908922
fn visit_str<E>(self, field: &str) -> Result<Self::Value, E>
909923
where
910924
E: de::Error,
@@ -917,6 +931,19 @@ mod content {
917931
Err(de::Error::invalid_value(Unexpected::Str(field), &self))
918932
}
919933
}
934+
935+
fn visit_bytes<E>(self, field: &[u8]) -> Result<Self::Value, E>
936+
where
937+
E: de::Error,
938+
{
939+
if field == self.tag.as_bytes() {
940+
Ok(TagOrContentField::Tag)
941+
} else if field == self.content.as_bytes() {
942+
Ok(TagOrContentField::Content)
943+
} else {
944+
Err(de::Error::invalid_value(Unexpected::Bytes(field), &self))
945+
}
946+
}
920947
}
921948

922949
/// Used by generated code to deserialize an adjacently tagged enum when
@@ -942,7 +969,7 @@ mod content {
942969
where
943970
D: Deserializer<'de>,
944971
{
945-
deserializer.deserialize_str(self)
972+
deserializer.deserialize_identifier(self)
946973
}
947974
}
948975

@@ -957,6 +984,17 @@ mod content {
957984
)
958985
}
959986

987+
fn visit_u64<E>(self, field_index: u64) -> Result<Self::Value, E>
988+
where
989+
E: de::Error,
990+
{
991+
match field_index {
992+
0 => Ok(TagContentOtherField::Tag),
993+
1 => Ok(TagContentOtherField::Content),
994+
_ => Ok(TagContentOtherField::Other),
995+
}
996+
}
997+
960998
fn visit_str<E>(self, field: &str) -> Result<Self::Value, E>
961999
where
9621000
E: de::Error,

0 commit comments

Comments
 (0)