know_yaml/
parser.rs

1// This is free and unencumbered software released into the public domain.
2
3use 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}