preserves/implementations/rust/src/value/decoder.rs

41 lines
1.1 KiB
Rust
Raw Normal View History

2020-05-25 13:00:58 +00:00
use super::reader::{Reader, is_eof_error};
use super::value::{NestedValue, Domain};
2019-09-09 21:08:26 +00:00
2020-05-25 13:40:01 +00:00
pub use super::reader::{Result, DecodePlaceholderMap};
2019-09-09 21:08:26 +00:00
2020-05-25 13:00:58 +00:00
pub struct Decoder<'a, R: Reader, N: NestedValue<Dom>, Dom: Domain> {
pub read: R,
2020-05-25 13:00:58 +00:00
placeholders: Option<&'a DecodePlaceholderMap<N, Dom>>,
read_annotations: bool,
2019-09-09 21:08:26 +00:00
}
impl<'a, R: Reader, N: NestedValue<D>, D: Domain> Decoder<'a, R, N, D> {
pub fn new(read: R, placeholders: Option<&'a DecodePlaceholderMap<N, D>>) ->
Self
{
2020-05-25 13:00:58 +00:00
Decoder {
2019-09-09 21:08:26 +00:00
read,
placeholders,
read_annotations: true,
2019-09-09 21:08:26 +00:00
}
}
2019-10-20 12:57:04 +00:00
pub fn set_read_annotations(&mut self, read_annotations: bool) {
self.read_annotations = read_annotations
}
pub fn next_or_err(&mut self) -> Result<N> {
2020-05-25 13:00:58 +00:00
self.read.next(self.placeholders, self.read_annotations)
2019-09-09 21:08:26 +00:00
}
}
2019-09-09 21:08:26 +00:00
impl<'a, R: Reader, N: NestedValue<D>, D: Domain> std::iter::Iterator for Decoder<'a, R, N, D> {
type Item = Result<N>;
fn next(&mut self) -> Option<Self::Item> {
match self.next_or_err() {
Err(e) if is_eof_error(&e) => None,
other => Some(other)
2019-09-09 21:08:26 +00:00
}
}
}