use std::fmt;
use xmlparser::{
FromSpan,
Stream,
StrSpan,
};
use error::{
StreamResult,
};
use {
Length,
StreamExt,
};
#[derive(Copy, Clone, PartialEq)]
pub struct NumberList<'a>(Stream<'a>);
impl<'a> FromSpan<'a> for NumberList<'a> {
fn from_span(span: StrSpan<'a>) -> Self {
NumberList(Stream::from_span(span))
}
}
impl<'a> fmt::Debug for NumberList<'a> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "NumberList({:?})", self.0.span())
}
}
impl<'a> Iterator for NumberList<'a> {
type Item = StreamResult<f64>;
fn next(&mut self) -> Option<Self::Item> {
if self.0.at_end() {
None
} else {
Some(self.0.parse_list_number())
}
}
}
#[derive(Copy, Clone, PartialEq)]
pub struct LengthList<'a>(Stream<'a>);
impl<'a> LengthList<'a> {
pub fn from_span(span: StrSpan<'a>) -> LengthList<'a> {
LengthList(Stream::from_span(span))
}
}
impl<'a> fmt::Debug for LengthList<'a> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "LengthList({:?})", self.0.span())
}
}
impl<'a> Iterator for LengthList<'a> {
type Item = StreamResult<Length>;
fn next(&mut self) -> Option<Self::Item> {
if self.0.at_end() {
None
} else {
Some(self.0.parse_list_length())
}
}
}