2
2
3
3
use crate :: {
4
4
de:: key:: QNameDeserializer ,
5
+ de:: resolver:: EntityResolver ,
5
6
de:: simple_type:: SimpleTypeDeserializer ,
6
7
de:: { str2bool, DeEvent , Deserializer , XmlRead , TEXT_KEY , VALUE_KEY } ,
7
8
encoding:: Decoder ,
@@ -165,13 +166,14 @@ enum ValueSource {
165
166
///
166
167
/// - `'a` lifetime represents a parent deserializer, which could own the data
167
168
/// buffer.
168
- pub ( crate ) struct MapAccess < ' de , ' a , R >
169
+ pub ( crate ) struct MapAccess < ' de , ' a , R , E >
169
170
where
170
171
R : XmlRead < ' de > ,
172
+ E : EntityResolver ,
171
173
{
172
174
/// Tag -- owner of attributes
173
175
start : BytesStart < ' de > ,
174
- de : & ' a mut Deserializer < ' de , R > ,
176
+ de : & ' a mut Deserializer < ' de , R , E > ,
175
177
/// State of the iterator over attributes. Contains the next position in the
176
178
/// inner `start` slice, from which next attribute should be parsed.
177
179
iter : IterState ,
@@ -190,13 +192,14 @@ where
190
192
has_value_field : bool ,
191
193
}
192
194
193
- impl < ' de , ' a , R > MapAccess < ' de , ' a , R >
195
+ impl < ' de , ' a , R , E > MapAccess < ' de , ' a , R , E >
194
196
where
195
197
R : XmlRead < ' de > ,
198
+ E : EntityResolver ,
196
199
{
197
200
/// Create a new MapAccess
198
201
pub fn new (
199
- de : & ' a mut Deserializer < ' de , R > ,
202
+ de : & ' a mut Deserializer < ' de , R , E > ,
200
203
start : BytesStart < ' de > ,
201
204
fields : & ' static [ & ' static str ] ,
202
205
) -> Result < Self , DeError > {
@@ -211,9 +214,10 @@ where
211
214
}
212
215
}
213
216
214
- impl < ' de , ' a , R > de:: MapAccess < ' de > for MapAccess < ' de , ' a , R >
217
+ impl < ' de , ' a , R , E > de:: MapAccess < ' de > for MapAccess < ' de , ' a , R , E >
215
218
where
216
219
R : XmlRead < ' de > ,
220
+ E : EntityResolver ,
217
221
{
218
222
type Error = DeError ;
219
223
@@ -369,13 +373,14 @@ macro_rules! forward {
369
373
/// A deserializer for a value of map or struct. That deserializer slightly
370
374
/// differently processes events for a primitive types and sequences than
371
375
/// a [`Deserializer`].
372
- struct MapValueDeserializer < ' de , ' a , ' m , R >
376
+ struct MapValueDeserializer < ' de , ' a , ' m , R , E >
373
377
where
374
378
R : XmlRead < ' de > ,
379
+ E : EntityResolver ,
375
380
{
376
381
/// Access to the map that created this deserializer. Gives access to the
377
382
/// context, such as list of fields, that current map known about.
378
- map : & ' m mut MapAccess < ' de , ' a , R > ,
383
+ map : & ' m mut MapAccess < ' de , ' a , R , E > ,
379
384
/// Determines, should [`Deserializer::read_string_impl()`] expand the second
380
385
/// level of tags or not.
381
386
///
@@ -453,9 +458,10 @@ where
453
458
allow_start : bool ,
454
459
}
455
460
456
- impl < ' de , ' a , ' m , R > MapValueDeserializer < ' de , ' a , ' m , R >
461
+ impl < ' de , ' a , ' m , R , E > MapValueDeserializer < ' de , ' a , ' m , R , E >
457
462
where
458
463
R : XmlRead < ' de > ,
464
+ E : EntityResolver ,
459
465
{
460
466
/// Returns a next string as concatenated content of consequent [`Text`] and
461
467
/// [`CData`] events, used inside [`deserialize_primitives!()`].
@@ -468,9 +474,10 @@ where
468
474
}
469
475
}
470
476
471
- impl < ' de , ' a , ' m , R > de:: Deserializer < ' de > for MapValueDeserializer < ' de , ' a , ' m , R >
477
+ impl < ' de , ' a , ' m , R , E > de:: Deserializer < ' de > for MapValueDeserializer < ' de , ' a , ' m , R , E >
472
478
where
473
479
R : XmlRead < ' de > ,
480
+ E : EntityResolver ,
474
481
{
475
482
type Error = DeError ;
476
483
@@ -629,13 +636,14 @@ impl<'de> TagFilter<'de> {
629
636
///
630
637
/// [`Text`]: crate::events::Event::Text
631
638
/// [`CData`]: crate::events::Event::CData
632
- struct MapValueSeqAccess < ' de , ' a , ' m , R >
639
+ struct MapValueSeqAccess < ' de , ' a , ' m , R , E >
633
640
where
634
641
R : XmlRead < ' de > ,
642
+ E : EntityResolver ,
635
643
{
636
644
/// Accessor to a map that creates this accessor and to a deserializer for
637
645
/// a sequence items.
638
- map : & ' m mut MapAccess < ' de , ' a , R > ,
646
+ map : & ' m mut MapAccess < ' de , ' a , R , E > ,
639
647
/// Filter that determines whether a tag is a part of this sequence.
640
648
///
641
649
/// When feature `overlapped-lists` is not activated, iteration will stop
@@ -653,18 +661,20 @@ where
653
661
}
654
662
655
663
#[ cfg( feature = "overlapped-lists" ) ]
656
- impl < ' de , ' a , ' m , R > Drop for MapValueSeqAccess < ' de , ' a , ' m , R >
664
+ impl < ' de , ' a , ' m , R , E > Drop for MapValueSeqAccess < ' de , ' a , ' m , R , E >
657
665
where
658
666
R : XmlRead < ' de > ,
667
+ E : EntityResolver ,
659
668
{
660
669
fn drop ( & mut self ) {
661
670
self . map . de . start_replay ( self . checkpoint ) ;
662
671
}
663
672
}
664
673
665
- impl < ' de , ' a , ' m , R > SeqAccess < ' de > for MapValueSeqAccess < ' de , ' a , ' m , R >
674
+ impl < ' de , ' a , ' m , R , E > SeqAccess < ' de > for MapValueSeqAccess < ' de , ' a , ' m , R , E >
666
675
where
667
676
R : XmlRead < ' de > ,
677
+ E : EntityResolver ,
668
678
{
669
679
type Error = DeError ;
670
680
@@ -705,18 +715,20 @@ where
705
715
////////////////////////////////////////////////////////////////////////////////////////////////////
706
716
707
717
/// A deserializer for a single item of a sequence.
708
- struct SeqItemDeserializer < ' de , ' a , ' m , R >
718
+ struct SeqItemDeserializer < ' de , ' a , ' m , R , E >
709
719
where
710
720
R : XmlRead < ' de > ,
721
+ E : EntityResolver ,
711
722
{
712
723
/// Access to the map that created this deserializer. Gives access to the
713
724
/// context, such as list of fields, that current map known about.
714
- map : & ' m mut MapAccess < ' de , ' a , R > ,
725
+ map : & ' m mut MapAccess < ' de , ' a , R , E > ,
715
726
}
716
727
717
- impl < ' de , ' a , ' m , R > SeqItemDeserializer < ' de , ' a , ' m , R >
728
+ impl < ' de , ' a , ' m , R , E > SeqItemDeserializer < ' de , ' a , ' m , R , E >
718
729
where
719
730
R : XmlRead < ' de > ,
731
+ E : EntityResolver ,
720
732
{
721
733
/// Returns a next string as concatenated content of consequent [`Text`] and
722
734
/// [`CData`] events, used inside [`deserialize_primitives!()`].
@@ -729,9 +741,10 @@ where
729
741
}
730
742
}
731
743
732
- impl < ' de , ' a , ' m , R > de:: Deserializer < ' de > for SeqItemDeserializer < ' de , ' a , ' m , R >
744
+ impl < ' de , ' a , ' m , R , E > de:: Deserializer < ' de > for SeqItemDeserializer < ' de , ' a , ' m , R , E >
733
745
where
734
746
R : XmlRead < ' de > ,
747
+ E : EntityResolver ,
735
748
{
736
749
type Error = DeError ;
737
750
0 commit comments