@@ -2436,6 +2436,38 @@ where
24362436 false
24372437 }
24382438
2439+ /// Returns the underlying XML reader.
2440+ ///
2441+ /// ```
2442+ /// # use pretty_assertions::assert_eq;
2443+ /// use serde::Deserialize;
2444+ /// use quick_xml::de::Deserializer;
2445+ /// use quick_xml::Reader;
2446+ ///
2447+ /// #[derive(Deserialize)]
2448+ /// struct SomeStruct {
2449+ /// field1: String,
2450+ /// field2: String,
2451+ /// }
2452+ ///
2453+ /// // Try to deserialize from broken XML
2454+ /// let mut de = Deserializer::from_str(
2455+ /// "<SomeStruct><field1><field2></SomeStruct>"
2456+ /// // 0 ^= 28 ^= 41
2457+ /// );
2458+ ///
2459+ /// let err = SomeStruct::deserialize(&mut de);
2460+ /// assert!(err.is_err());
2461+ ///
2462+ /// let reader: &Reader<_> = de.get_ref().get_ref();
2463+ ///
2464+ /// assert_eq!(reader.error_position(), 28);
2465+ /// assert_eq!(reader.buffer_position(), 41);
2466+ /// ```
2467+ pub fn get_ref ( & self ) -> & R {
2468+ & self . reader . reader
2469+ }
2470+
24392471 /// Set the maximum number of events that could be skipped during deserialization
24402472 /// of sequences.
24412473 ///
@@ -3065,6 +3097,41 @@ pub struct IoReader<R: BufRead> {
30653097 buf : Vec < u8 > ,
30663098}
30673099
3100+ impl < R : BufRead > IoReader < R > {
3101+ /// Returns the underlying XML reader.
3102+ ///
3103+ /// ```
3104+ /// # use pretty_assertions::assert_eq;
3105+ /// use serde::Deserialize;
3106+ /// use std::io::Cursor;
3107+ /// use quick_xml::de::Deserializer;
3108+ /// use quick_xml::Reader;
3109+ ///
3110+ /// #[derive(Deserialize)]
3111+ /// struct SomeStruct {
3112+ /// field1: String,
3113+ /// field2: String,
3114+ /// }
3115+ ///
3116+ /// // Try to deserialize from broken XML
3117+ /// let mut de = Deserializer::from_reader(Cursor::new(
3118+ /// "<SomeStruct><field1><field2></SomeStruct>"
3119+ /// // 0 ^= 28 ^= 41
3120+ /// ));
3121+ ///
3122+ /// let err = SomeStruct::deserialize(&mut de);
3123+ /// assert!(err.is_err());
3124+ ///
3125+ /// let reader: &Reader<Cursor<&str>> = de.get_ref().get_ref();
3126+ ///
3127+ /// assert_eq!(reader.error_position(), 28);
3128+ /// assert_eq!(reader.buffer_position(), 41);
3129+ /// ```
3130+ pub fn get_ref ( & self ) -> & Reader < R > {
3131+ & self . reader
3132+ }
3133+ }
3134+
30683135impl < ' i , R : BufRead > XmlRead < ' i > for IoReader < R > {
30693136 fn next ( & mut self ) -> Result < PayloadEvent < ' static > , DeError > {
30703137 loop {
@@ -3098,6 +3165,40 @@ pub struct SliceReader<'de> {
30983165 start_trimmer : StartTrimmer ,
30993166}
31003167
3168+ impl < ' de > SliceReader < ' de > {
3169+ /// Returns the underlying XML reader.
3170+ ///
3171+ /// ```
3172+ /// # use pretty_assertions::assert_eq;
3173+ /// use serde::Deserialize;
3174+ /// use quick_xml::de::Deserializer;
3175+ /// use quick_xml::Reader;
3176+ ///
3177+ /// #[derive(Deserialize)]
3178+ /// struct SomeStruct {
3179+ /// field1: String,
3180+ /// field2: String,
3181+ /// }
3182+ ///
3183+ /// // Try to deserialize from broken XML
3184+ /// let mut de = Deserializer::from_str(
3185+ /// "<SomeStruct><field1><field2></SomeStruct>"
3186+ /// // 0 ^= 28 ^= 41
3187+ /// );
3188+ ///
3189+ /// let err = SomeStruct::deserialize(&mut de);
3190+ /// assert!(err.is_err());
3191+ ///
3192+ /// let reader: &Reader<&[u8]> = de.get_ref().get_ref();
3193+ ///
3194+ /// assert_eq!(reader.error_position(), 28);
3195+ /// assert_eq!(reader.buffer_position(), 41);
3196+ /// ```
3197+ pub fn get_ref ( & self ) -> & Reader < & ' de [ u8 ] > {
3198+ & self . reader
3199+ }
3200+ }
3201+
31013202impl < ' de > XmlRead < ' de > for SliceReader < ' de > {
31023203 fn next ( & mut self ) -> Result < PayloadEvent < ' de > , DeError > {
31033204 loop {
0 commit comments