xsd_parser/quick_xml/reader/
slice_reader.rs1use 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
11pub struct SliceReader<'a> {
13 inner: NsReader<&'a [u8]>,
14}
15
16impl<'a> SliceReader<'a> {
17 #[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}