@@ -207,6 +207,7 @@ mod content {
207
207
208
208
use __private:: size_hint;
209
209
use actually_private;
210
+ use de:: value:: { MapDeserializer , SeqDeserializer } ;
210
211
use de:: {
211
212
self , Deserialize , DeserializeSeed , Deserializer , EnumAccess , Expected , IgnoredAny ,
212
213
MapAccess , SeqAccess , Unexpected , Visitor ,
@@ -299,6 +300,17 @@ mod content {
299
300
}
300
301
}
301
302
303
+ impl < ' de , E > de:: IntoDeserializer < ' de , E > for Content < ' de >
304
+ where
305
+ E : de:: Error ,
306
+ {
307
+ type Deserializer = ContentDeserializer < ' de , E > ;
308
+
309
+ fn into_deserializer ( self ) -> Self :: Deserializer {
310
+ ContentDeserializer :: new ( self )
311
+ }
312
+ }
313
+
302
314
struct ContentVisitor < ' de > {
303
315
value : PhantomData < Content < ' de > > ,
304
316
}
@@ -1074,7 +1086,7 @@ mod content {
1074
1086
E : de:: Error ,
1075
1087
{
1076
1088
let seq = content. into_iter ( ) . map ( ContentDeserializer :: new) ;
1077
- let mut seq_visitor = de :: value :: SeqDeserializer :: new ( seq) ;
1089
+ let mut seq_visitor = SeqDeserializer :: new ( seq) ;
1078
1090
let value = try!( visitor. visit_seq ( & mut seq_visitor) ) ;
1079
1091
try!( seq_visitor. end ( ) ) ;
1080
1092
Ok ( value)
@@ -1091,7 +1103,7 @@ mod content {
1091
1103
let map = content
1092
1104
. into_iter ( )
1093
1105
. map ( |( k, v) | ( ContentDeserializer :: new ( k) , ContentDeserializer :: new ( v) ) ) ;
1094
- let mut map_visitor = de :: value :: MapDeserializer :: new ( map) ;
1106
+ let mut map_visitor = MapDeserializer :: new ( map) ;
1095
1107
let value = try!( visitor. visit_map ( & mut map_visitor) ) ;
1096
1108
try!( map_visitor. end ( ) ) ;
1097
1109
Ok ( value)
@@ -1569,7 +1581,7 @@ mod content {
1569
1581
{
1570
1582
match self . value {
1571
1583
Some ( Content :: Seq ( v) ) => {
1572
- de:: Deserializer :: deserialize_any ( SeqDeserializer :: new ( v) , visitor)
1584
+ de:: Deserializer :: deserialize_any ( SeqDeserializer :: new ( v. into_iter ( ) ) , visitor)
1573
1585
}
1574
1586
Some ( other) => Err ( de:: Error :: invalid_type (
1575
1587
other. unexpected ( ) ,
@@ -1592,10 +1604,10 @@ mod content {
1592
1604
{
1593
1605
match self . value {
1594
1606
Some ( Content :: Map ( v) ) => {
1595
- de:: Deserializer :: deserialize_any ( MapDeserializer :: new ( v) , visitor)
1607
+ de:: Deserializer :: deserialize_any ( MapDeserializer :: new ( v. into_iter ( ) ) , visitor)
1596
1608
}
1597
1609
Some ( Content :: Seq ( v) ) => {
1598
- de:: Deserializer :: deserialize_any ( SeqDeserializer :: new ( v) , visitor)
1610
+ de:: Deserializer :: deserialize_any ( SeqDeserializer :: new ( v. into_iter ( ) ) , visitor)
1599
1611
}
1600
1612
Some ( other) => Err ( de:: Error :: invalid_type (
1601
1613
other. unexpected ( ) ,
@@ -1609,156 +1621,6 @@ mod content {
1609
1621
}
1610
1622
}
1611
1623
1612
- struct SeqDeserializer < ' de , E >
1613
- where
1614
- E : de:: Error ,
1615
- {
1616
- iter : <Vec < Content < ' de > > as IntoIterator >:: IntoIter ,
1617
- err : PhantomData < E > ,
1618
- }
1619
-
1620
- impl < ' de , E > SeqDeserializer < ' de , E >
1621
- where
1622
- E : de:: Error ,
1623
- {
1624
- fn new ( vec : Vec < Content < ' de > > ) -> Self {
1625
- SeqDeserializer {
1626
- iter : vec. into_iter ( ) ,
1627
- err : PhantomData ,
1628
- }
1629
- }
1630
- }
1631
-
1632
- impl < ' de , E > de:: Deserializer < ' de > for SeqDeserializer < ' de , E >
1633
- where
1634
- E : de:: Error ,
1635
- {
1636
- type Error = E ;
1637
-
1638
- #[ inline]
1639
- fn deserialize_any < V > ( mut self , visitor : V ) -> Result < V :: Value , Self :: Error >
1640
- where
1641
- V : de:: Visitor < ' de > ,
1642
- {
1643
- let len = self . iter . len ( ) ;
1644
- if len == 0 {
1645
- visitor. visit_unit ( )
1646
- } else {
1647
- let ret = try!( visitor. visit_seq ( & mut self ) ) ;
1648
- let remaining = self . iter . len ( ) ;
1649
- if remaining == 0 {
1650
- Ok ( ret)
1651
- } else {
1652
- Err ( de:: Error :: invalid_length ( len, & "fewer elements in array" ) )
1653
- }
1654
- }
1655
- }
1656
-
1657
- forward_to_deserialize_any ! {
1658
- bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
1659
- bytes byte_buf option unit unit_struct newtype_struct seq tuple
1660
- tuple_struct map struct enum identifier ignored_any
1661
- }
1662
- }
1663
-
1664
- impl < ' de , E > de:: SeqAccess < ' de > for SeqDeserializer < ' de , E >
1665
- where
1666
- E : de:: Error ,
1667
- {
1668
- type Error = E ;
1669
-
1670
- fn next_element_seed < T > ( & mut self , seed : T ) -> Result < Option < T :: Value > , Self :: Error >
1671
- where
1672
- T : de:: DeserializeSeed < ' de > ,
1673
- {
1674
- match self . iter . next ( ) {
1675
- Some ( value) => seed. deserialize ( ContentDeserializer :: new ( value) ) . map ( Some ) ,
1676
- None => Ok ( None ) ,
1677
- }
1678
- }
1679
-
1680
- fn size_hint ( & self ) -> Option < usize > {
1681
- size_hint:: from_bounds ( & self . iter )
1682
- }
1683
- }
1684
-
1685
- struct MapDeserializer < ' de , E >
1686
- where
1687
- E : de:: Error ,
1688
- {
1689
- iter : <Vec < ( Content < ' de > , Content < ' de > ) > as IntoIterator >:: IntoIter ,
1690
- value : Option < Content < ' de > > ,
1691
- err : PhantomData < E > ,
1692
- }
1693
-
1694
- impl < ' de , E > MapDeserializer < ' de , E >
1695
- where
1696
- E : de:: Error ,
1697
- {
1698
- fn new ( map : Vec < ( Content < ' de > , Content < ' de > ) > ) -> Self {
1699
- MapDeserializer {
1700
- iter : map. into_iter ( ) ,
1701
- value : None ,
1702
- err : PhantomData ,
1703
- }
1704
- }
1705
- }
1706
-
1707
- impl < ' de , E > de:: MapAccess < ' de > for MapDeserializer < ' de , E >
1708
- where
1709
- E : de:: Error ,
1710
- {
1711
- type Error = E ;
1712
-
1713
- fn next_key_seed < T > ( & mut self , seed : T ) -> Result < Option < T :: Value > , Self :: Error >
1714
- where
1715
- T : de:: DeserializeSeed < ' de > ,
1716
- {
1717
- match self . iter . next ( ) {
1718
- Some ( ( key, value) ) => {
1719
- self . value = Some ( value) ;
1720
- seed. deserialize ( ContentDeserializer :: new ( key) ) . map ( Some )
1721
- }
1722
- None => Ok ( None ) ,
1723
- }
1724
- }
1725
-
1726
- fn next_value_seed < T > ( & mut self , seed : T ) -> Result < T :: Value , Self :: Error >
1727
- where
1728
- T : de:: DeserializeSeed < ' de > ,
1729
- {
1730
- match self . value . take ( ) {
1731
- Some ( value) => seed. deserialize ( ContentDeserializer :: new ( value) ) ,
1732
- None => Err ( de:: Error :: custom ( "value is missing" ) ) ,
1733
- }
1734
- }
1735
-
1736
- fn size_hint ( & self ) -> Option < usize > {
1737
- size_hint:: from_bounds ( & self . iter )
1738
- }
1739
- }
1740
-
1741
- impl < ' de , E > de:: Deserializer < ' de > for MapDeserializer < ' de , E >
1742
- where
1743
- E : de:: Error ,
1744
- {
1745
- type Error = E ;
1746
-
1747
- #[ inline]
1748
- fn deserialize_any < V > ( self , visitor : V ) -> Result < V :: Value , Self :: Error >
1749
- where
1750
- V : de:: Visitor < ' de > ,
1751
- {
1752
- visitor. visit_map ( self )
1753
- }
1754
-
1755
- forward_to_deserialize_any ! {
1756
- bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
1757
- bytes byte_buf option unit unit_struct newtype_struct seq tuple
1758
- tuple_struct map struct enum identifier ignored_any
1759
- }
1760
- }
1761
-
1762
1624
/// Not public API.
1763
1625
pub struct ContentRefDeserializer < ' a , ' de : ' a , E > {
1764
1626
content : & ' a Content < ' de > ,
@@ -1820,7 +1682,7 @@ mod content {
1820
1682
E : de:: Error ,
1821
1683
{
1822
1684
let seq = content. iter ( ) . map ( ContentRefDeserializer :: new) ;
1823
- let mut seq_visitor = de :: value :: SeqDeserializer :: new ( seq) ;
1685
+ let mut seq_visitor = SeqDeserializer :: new ( seq) ;
1824
1686
let value = try!( visitor. visit_seq ( & mut seq_visitor) ) ;
1825
1687
try!( seq_visitor. end ( ) ) ;
1826
1688
Ok ( value)
@@ -1840,7 +1702,7 @@ mod content {
1840
1702
ContentRefDeserializer :: new ( v) ,
1841
1703
)
1842
1704
} ) ;
1843
- let mut map_visitor = de :: value :: MapDeserializer :: new ( map) ;
1705
+ let mut map_visitor = MapDeserializer :: new ( map) ;
1844
1706
let value = try!( visitor. visit_map ( & mut map_visitor) ) ;
1845
1707
try!( map_visitor. end ( ) ) ;
1846
1708
Ok ( value)
0 commit comments