xsd_parser/quick_xml/reader/
slice_reader.rs

1use std::fmt::{Debug, Formatter, Result as FmtResult};
2
3use quick_xml::{
4    events::Event,
5    name::{LocalName, PrefixIter, QName, ResolveResult},
6    NsReader,
7};
8
9use super::super::{Error, XmlReader, XmlReaderSync};
10
11/// Implements a [`XmlReader`] for string slices.
12pub struct SliceReader<'a> {
13    inner: NsReader<&'a [u8]>,
14}
15
16impl<'a> SliceReader<'a> {
17    /// Creates a new [`SliceReader`] instance from the passed string slice `s`.
18    #[must_use]
19    pub fn new(s: &'a str) -> Self {
20        let inner = NsReader::from_str(s);
21
22        Self { inner }
23    }
24}
25
26impl XmlReader for SliceReader<'_> {
27    fn resolve<'n>(&self, name: QName<'n>, attribute: bool) -> (ResolveResult<'_>, LocalName<'n>) {
28        self.inner.resolve(name, attribute)
29    }
30
31    fn prefixes(&self) -> PrefixIter<'_> {
32        self.inner.prefixes()
33    }
34
35    fn current_position(&self) -> u64 {
36        self.inner.buffer_position()
37    }
38
39    fn error_position(&self) -> u64 {
40        self.inner.error_position()
41    }
42}
43
44impl<'a> XmlReaderSync<'a> for SliceReader<'a> {
45    fn read_event(&mut self) -> Result<Event<'a>, Error> {
46        self.inner
47            .read_event()
48            .map_err(|error| self.map_error(error))
49    }
50}
51
52#[cfg(feature = "async")]
53impl<'a> super::super::XmlReaderAsync<'a> for SliceReader<'a> {
54    type ReadEventFut<'x>
55        = std::future::Ready<Result<Event<'a>, Error>>
56    where
57        Self: 'x;
58
59    fn read_event_async(&mut self) -> Self::ReadEventFut<'_> {
60        std::future::ready(
61            self.inner
62                .read_event()
63                .map_err(|error| self.map_error(error)),
64        )
65    }
66}
67
68impl Debug for SliceReader<'_> {
69    fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
70        write!(f, "SliceReader")
71    }
72}