Skip to content

Commit 6d00971

Browse files
authored
Merge pull request #2305 from serde-rs/enumaccessdeserializer
Add EnumAccessDeserializer to turn EnumAccess into a Deserializer
2 parents 3fd8e52 + 354b48f commit 6d00971

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

serde/src/de/value.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1510,6 +1510,41 @@ where
15101510

15111511
////////////////////////////////////////////////////////////////////////////////
15121512

1513+
/// A deserializer holding an `EnumAccess`.
1514+
#[derive(Clone, Debug)]
1515+
pub struct EnumAccessDeserializer<A> {
1516+
access: A,
1517+
}
1518+
1519+
impl<A> EnumAccessDeserializer<A> {
1520+
/// Construct a new `EnumAccessDeserializer<A>`.
1521+
pub fn new(access: A) -> Self {
1522+
EnumAccessDeserializer { access: access }
1523+
}
1524+
}
1525+
1526+
impl<'de, A> de::Deserializer<'de> for EnumAccessDeserializer<A>
1527+
where
1528+
A: de::EnumAccess<'de>,
1529+
{
1530+
type Error = A::Error;
1531+
1532+
fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
1533+
where
1534+
V: de::Visitor<'de>,
1535+
{
1536+
visitor.visit_enum(self.access)
1537+
}
1538+
1539+
forward_to_deserialize_any! {
1540+
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
1541+
bytes byte_buf option unit unit_struct newtype_struct seq tuple
1542+
tuple_struct map struct enum identifier ignored_any
1543+
}
1544+
}
1545+
1546+
////////////////////////////////////////////////////////////////////////////////
1547+
15131548
mod private {
15141549
use lib::*;
15151550

0 commit comments

Comments
 (0)