1use crate::Error;
4use know::classes::Thing;
5use serde::Deserialize;
6use std::io::Read;
7
8pub struct Parser<'de>(serde_yaml::Deserializer<'de>);
9
10impl<'de> Parser<'de> {
11 pub fn from_reader<R>(input: R) -> Self
12 where
13 R: Read + 'de,
14 {
15 Parser(serde_yaml::Deserializer::from_reader(input))
16 }
17}
18
19impl<'de> Iterator for Parser<'de> {
20 type Item = Result<Thing, Error>;
21
22 fn next(&mut self) -> Option<Self::Item> {
23 match self.0.next().map(|result| Thing::deserialize(result)) {
24 Some(Ok(thing)) => Some(Ok(thing)),
25 Some(Err(err)) => Some(Err(err.into())),
26 None => None,
27 }
28 }
29}