book_cookbook_things/
book_cookbook_things.rs1use 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}