libyaml/
parser_builder.rs

1use std::io;
2
3use crate::{Encoding, Parser, ParserError};
4use crate::sys;
5
6/// Builder for parsers.
7pub struct ParserBuilder<'a> {
8    parser: Box<Parser<'a>>,
9}
10
11impl<'a> ParserBuilder<'a> {
12    /// Start building a parser.
13    pub fn new<R: io::Read + 'a>(reader: R) -> Result<Self, ParserError> {
14        Parser::new(reader).map(|parser| Self { parser })
15    }
16
17    /// Finish building a parser.
18    pub fn finish(self) -> Box<Parser<'a>> {
19        self.parser
20    }
21
22    /// Set encoding.
23    pub fn encoding(mut self, encoding: Encoding) -> Self {
24        unsafe {
25            sys::yaml_parser_set_encoding(
26                self.parser.as_raw_ptr(),
27                encoding.into_raw(),
28            );
29        }
30
31        self
32    }
33}