@@ -221,6 +221,7 @@ pub use crate::errors::serialize::DeError;
221
221
use crate :: {
222
222
errors:: Error ,
223
223
events:: { BytesCData , BytesEnd , BytesStart , BytesText , Event } ,
224
+ name:: QName ,
224
225
reader:: Decoder ,
225
226
Reader ,
226
227
} ;
@@ -514,16 +515,16 @@ where
514
515
match self . write . back ( ) {
515
516
// Skip all subtree, if we skip a start event
516
517
Some ( DeEvent :: Start ( e) ) => {
517
- let end = e. name ( ) . to_owned ( ) ;
518
+ let end = e. name ( ) . as_ref ( ) . to_owned ( ) ;
518
519
let mut depth = 0 ;
519
520
loop {
520
521
let event = self . next ( ) ?;
521
522
match event {
522
- DeEvent :: Start ( ref e) if e. name ( ) == end => {
523
+ DeEvent :: Start ( ref e) if e. name ( ) . as_ref ( ) == end => {
523
524
self . skip_event ( event) ?;
524
525
depth += 1 ;
525
526
}
526
- DeEvent :: End ( ref e) if e. name ( ) == end => {
527
+ DeEvent :: End ( ref e) if e. name ( ) . as_ref ( ) == end => {
527
528
self . skip_event ( event) ?;
528
529
if depth == 0 {
529
530
return Ok ( ( ) ) ;
@@ -571,7 +572,9 @@ where
571
572
let e = self . next ( ) ?;
572
573
match e {
573
574
DeEvent :: Start ( e) => return Ok ( Some ( e) ) ,
574
- DeEvent :: End ( e) => return Err ( DeError :: UnexpectedEnd ( e. name ( ) . to_owned ( ) ) ) ,
575
+ DeEvent :: End ( e) => {
576
+ return Err ( DeError :: UnexpectedEnd ( e. name ( ) . as_ref ( ) . to_owned ( ) ) )
577
+ }
575
578
DeEvent :: Eof => return Ok ( None ) ,
576
579
_ => ( ) , // ignore texts
577
580
}
@@ -631,20 +634,24 @@ where
631
634
DeEvent :: Text ( t) if unescape => t. unescape ( ) ?,
632
635
DeEvent :: Text ( t) => BytesCData :: new ( t. into_inner ( ) ) ,
633
636
DeEvent :: CData ( t) => t,
634
- DeEvent :: Start ( s) => return Err ( DeError :: UnexpectedStart ( s. name ( ) . to_owned ( ) ) ) ,
637
+ DeEvent :: Start ( s) => {
638
+ return Err ( DeError :: UnexpectedStart ( s. name ( ) . as_ref ( ) . to_owned ( ) ) )
639
+ }
635
640
// We can get End event in case of `<tag></tag>` or `<tag/>` input
636
641
// Return empty text in that case
637
642
DeEvent :: End ( end) if end. name ( ) == e. name ( ) => {
638
643
return Ok ( BytesCData :: new ( & [ ] as & [ u8 ] ) ) ;
639
644
}
640
- DeEvent :: End ( end) => return Err ( DeError :: UnexpectedEnd ( end. name ( ) . to_owned ( ) ) ) ,
645
+ DeEvent :: End ( end) => {
646
+ return Err ( DeError :: UnexpectedEnd ( end. name ( ) . as_ref ( ) . to_owned ( ) ) )
647
+ }
641
648
DeEvent :: Eof => return Err ( DeError :: UnexpectedEof ) ,
642
649
} ;
643
650
self . read_to_end ( e. name ( ) ) ?;
644
651
Ok ( t)
645
652
}
646
- DeEvent :: Start ( e) => Err ( DeError :: UnexpectedStart ( e. name ( ) . to_owned ( ) ) ) ,
647
- DeEvent :: End ( e) => Err ( DeError :: UnexpectedEnd ( e. name ( ) . to_owned ( ) ) ) ,
653
+ DeEvent :: Start ( e) => Err ( DeError :: UnexpectedStart ( e. name ( ) . as_ref ( ) . to_owned ( ) ) ) ,
654
+ DeEvent :: End ( e) => Err ( DeError :: UnexpectedEnd ( e. name ( ) . as_ref ( ) . to_owned ( ) ) ) ,
648
655
DeEvent :: Eof => Err ( DeError :: UnexpectedEof ) ,
649
656
}
650
657
}
@@ -658,7 +665,7 @@ where
658
665
/// Drops all events until event with [name](BytesEnd::name()) `name` won't be
659
666
/// dropped. This method should be called after [`Self::next()`]
660
667
#[ cfg( feature = "overlapped-lists" ) ]
661
- fn read_to_end ( & mut self , name : & [ u8 ] ) -> Result < ( ) , DeError > {
668
+ fn read_to_end ( & mut self , name : QName ) -> Result < ( ) , DeError > {
662
669
let mut depth = 0 ;
663
670
loop {
664
671
match self . read . pop_front ( ) {
@@ -682,7 +689,7 @@ where
682
689
}
683
690
}
684
691
#[ cfg( not( feature = "overlapped-lists" ) ) ]
685
- fn read_to_end ( & mut self , name : & [ u8 ] ) -> Result < ( ) , DeError > {
692
+ fn read_to_end ( & mut self , name : QName ) -> Result < ( ) , DeError > {
686
693
// First one might be in self.peek
687
694
match self . next ( ) ? {
688
695
DeEvent :: Start ( e) => self . reader . read_to_end ( e. name ( ) ) ?,
@@ -751,10 +758,10 @@ where
751
758
{
752
759
// Try to go to the next `<tag ...>...</tag>` or `<tag .../>`
753
760
if let Some ( e) = self . next_start ( ) ? {
754
- let name = e. name ( ) . to_vec ( ) ;
761
+ let name = e. name ( ) . as_ref ( ) . to_vec ( ) ;
755
762
let map = map:: MapAccess :: new ( self , e, fields) ?;
756
763
let value = visitor. visit_map ( map) ?;
757
- self . read_to_end ( & name) ?;
764
+ self . read_to_end ( QName ( & name) ) ?;
758
765
Ok ( value)
759
766
} else {
760
767
Err ( DeError :: ExpectedStart )
@@ -789,7 +796,7 @@ where
789
796
visitor. visit_unit ( )
790
797
}
791
798
DeEvent :: Text ( _) | DeEvent :: CData ( _) => visitor. visit_unit ( ) ,
792
- DeEvent :: End ( e) => Err ( DeError :: UnexpectedEnd ( e. name ( ) . to_owned ( ) ) ) ,
799
+ DeEvent :: End ( e) => Err ( DeError :: UnexpectedEnd ( e. name ( ) . as_ref ( ) . to_owned ( ) ) ) ,
793
800
DeEvent :: Eof => Err ( DeError :: UnexpectedEof ) ,
794
801
}
795
802
}
@@ -893,7 +900,7 @@ where
893
900
{
894
901
match self . next ( ) ? {
895
902
DeEvent :: Start ( e) => self . read_to_end ( e. name ( ) ) ?,
896
- DeEvent :: End ( e) => return Err ( DeError :: UnexpectedEnd ( e. name ( ) . to_owned ( ) ) ) ,
903
+ DeEvent :: End ( e) => return Err ( DeError :: UnexpectedEnd ( e. name ( ) . as_ref ( ) . to_owned ( ) ) ) ,
897
904
DeEvent :: Eof => return Err ( DeError :: UnexpectedEof ) ,
898
905
_ => ( ) ,
899
906
}
@@ -925,7 +932,7 @@ pub trait XmlRead<'i> {
925
932
926
933
/// Skips until end element is found. Unlike `next()` it will not allocate
927
934
/// when it cannot satisfy the lifetime.
928
- fn read_to_end ( & mut self , name : & [ u8 ] ) -> Result < ( ) , DeError > ;
935
+ fn read_to_end ( & mut self , name : QName ) -> Result < ( ) , DeError > ;
929
936
930
937
/// A copy of the reader's decoder used to decode strings.
931
938
fn decoder ( & self ) -> Decoder ;
@@ -960,7 +967,7 @@ impl<'i, R: BufRead> XmlRead<'i> for IoReader<R> {
960
967
event
961
968
}
962
969
963
- fn read_to_end ( & mut self , name : & [ u8 ] ) -> Result < ( ) , DeError > {
970
+ fn read_to_end ( & mut self , name : QName ) -> Result < ( ) , DeError > {
964
971
match self . reader . read_to_end ( name, & mut self . buf ) {
965
972
Err ( Error :: UnexpectedEof ( _) ) => Err ( DeError :: UnexpectedEof ) ,
966
973
other => Ok ( other?) ,
@@ -996,7 +1003,7 @@ impl<'de> XmlRead<'de> for SliceReader<'de> {
996
1003
}
997
1004
}
998
1005
999
- fn read_to_end ( & mut self , name : & [ u8 ] ) -> Result < ( ) , DeError > {
1006
+ fn read_to_end ( & mut self , name : QName ) -> Result < ( ) , DeError > {
1000
1007
match self . reader . read_to_end_unbuffered ( name) {
1001
1008
Err ( Error :: UnexpectedEof ( _) ) => Err ( DeError :: UnexpectedEof ) ,
1002
1009
other => Ok ( other?) ,
@@ -1212,7 +1219,7 @@ mod tests {
1212
1219
de. next( ) . unwrap( ) ,
1213
1220
Start ( BytesStart :: borrowed_name( b"target" ) )
1214
1221
) ;
1215
- de. read_to_end ( b"target" ) . unwrap ( ) ;
1222
+ de. read_to_end ( QName ( b"target" ) ) . unwrap ( ) ;
1216
1223
assert_eq ! ( de. read, vec![ ] ) ;
1217
1224
assert_eq ! (
1218
1225
de. write,
@@ -1252,7 +1259,7 @@ mod tests {
1252
1259
de. next( ) . unwrap( ) ,
1253
1260
Start ( BytesStart :: borrowed_name( b"skip" ) )
1254
1261
) ;
1255
- de. read_to_end ( b"skip" ) . unwrap ( ) ;
1262
+ de. read_to_end ( QName ( b"skip" ) ) . unwrap ( ) ;
1256
1263
1257
1264
assert_eq ! ( de. next( ) . unwrap( ) , End ( BytesEnd :: borrowed( b"root" ) ) ) ;
1258
1265
}
@@ -1313,7 +1320,7 @@ mod tests {
1313
1320
de. next( ) . unwrap( ) ,
1314
1321
Start ( BytesStart :: borrowed( br#"tag a="1""# , 3 ) )
1315
1322
) ;
1316
- assert_eq ! ( de. read_to_end( b"tag" ) . unwrap( ) , ( ) ) ;
1323
+ assert_eq ! ( de. read_to_end( QName ( b"tag" ) ) . unwrap( ) , ( ) ) ;
1317
1324
1318
1325
assert_eq ! (
1319
1326
de. next( ) . unwrap( ) ,
@@ -1329,7 +1336,7 @@ mod tests {
1329
1336
de. next( ) . unwrap( ) ,
1330
1337
Start ( BytesStart :: borrowed( b"self-closed" , 11 ) )
1331
1338
) ;
1332
- assert_eq ! ( de. read_to_end( b"self-closed" ) . unwrap( ) , ( ) ) ;
1339
+ assert_eq ! ( de. read_to_end( QName ( b"self-closed" ) ) . unwrap( ) , ( ) ) ;
1333
1340
1334
1341
assert_eq ! ( de. next( ) . unwrap( ) , End ( BytesEnd :: borrowed( b"root" ) ) ) ;
1335
1342
assert_eq ! ( de. next( ) . unwrap( ) , Eof ) ;
@@ -1432,7 +1439,7 @@ mod tests {
1432
1439
reader. next( ) . unwrap( ) ,
1433
1440
DeEvent :: Start ( BytesStart :: borrowed( b"item " , 4 ) )
1434
1441
) ;
1435
- reader. read_to_end ( b"item" ) . unwrap ( ) ;
1442
+ reader. read_to_end ( QName ( b"item" ) ) . unwrap ( ) ;
1436
1443
assert_eq ! ( reader. next( ) . unwrap( ) , DeEvent :: Eof ) ;
1437
1444
}
1438
1445
0 commit comments