vrl/parser/
mod.rs

1#![deny(
2    warnings,
3    clippy::all,
4    clippy::pedantic,
5    unreachable_pub,
6    unused_allocation,
7    unused_extern_crates,
8    unused_assignments,
9    unused_comparisons
10)]
11#![allow(
12    clippy::missing_errors_doc, // allowed in initial deny commit
13    clippy::semicolon_if_nothing_returned, // allowed in initial deny commit
14    clippy::too_many_lines, // allowed in initial deny commit
15)]
16
17use std::borrow::ToOwned;
18
19use lalrpop_util::lalrpop_mod;
20lalrpop_mod!(
21    #[allow(
22        warnings,
23        clippy::all,
24        clippy::pedantic,
25        unreachable_pub,
26        unused_allocation,
27        unused_extern_crates,
28        unused_assignments,
29        unused_comparisons
30    )]
31    parser,
32    "/src/parser/parser.rs"
33);
34
35pub mod ast;
36mod lex;
37pub mod template_string;
38
39pub use crate::diagnostic::Span;
40pub use ast::{Literal, Program};
41pub use lex::{Error, Token};
42
43pub fn parse(input: impl AsRef<str>) -> Result<Program, Error> {
44    let lexer = lex::Lexer::new(input.as_ref());
45
46    parser::ProgramParser::new()
47        .parse(input.as_ref(), lexer)
48        .map_err(|source| match source {
49            lalrpop_util::ParseError::User { error } => error,
50            source => Error::ParseError {
51                span: Span::new(0, input.as_ref().len()),
52                source: source
53                    .map_token(|t| t.map(ToOwned::to_owned))
54                    .map_error(|err| err.to_string()),
55                dropped_tokens: vec![],
56            },
57        })
58}
59
60pub fn parse_literal(input: impl AsRef<str>) -> Result<Literal, Error> {
61    let lexer = lex::Lexer::new(input.as_ref());
62
63    parser::LiteralParser::new()
64        .parse(input.as_ref(), lexer)
65        .map_err(|source| Error::ParseError {
66            span: Span::new(0, input.as_ref().len()),
67            source: source
68                .map_token(|t| t.map(ToOwned::to_owned))
69                .map_error(|err| err.to_string()),
70            dropped_tokens: vec![],
71        })
72}