book_cookbook_things/
book_cookbook_things.rs

1use trivet::{
2    errors::syntax_error, parse_from_stdin, parsers::json::JSONParser, strings::StringEncoder,
3    ParseResult,
4};
5
6pub fn main() -> ParseResult<()> {
7    let mut parser = parse_from_stdin();
8    loop {
9        parser.consume_ws();
10        if parser.is_at_eof() {
11            break;
12        }
13        if parser.peek_and_consume_str_ws("string") {
14            parser.expect(':')?;
15            parser.consume_ws();
16            let ch = parser.peek();
17            if ch == '"' || ch == '\'' {
18                let string = parser.parse_string_match_delimiter_ws()?;
19                println!("Got string: {}", StringEncoder::new().encode(&string));
20            }
21        } else if parser.peek_and_consume_str_ws("integer") {
22            parser.expect(':')?;
23            parser.consume_ws();
24            let number = parser.parse_u128_ws()?;
25            println!("Got integer: {}", number);
26        } else if parser.peek_and_consume_str_ws("float") {
27            parser.expect(':')?;
28            parser.consume_ws();
29            let number = parser.parse_f64_ws()?;
30            println!("Got float: {}", number);
31        } else if parser.peek_and_consume_str_ws("json") {
32            parser.expect(':')?;
33            parser.consume_ws();
34            let json = JSONParser::new().parse_value_unstandard_ws(&mut parser)?;
35            println!("Got JSON:\n{}", json);
36        } else {
37            return Err(syntax_error(
38                parser.loc(),
39                "Unexpected element found in stream",
40            ));
41        }
42    }
43    Ok(())
44}