protobuf_ast_parser/
parser.rs

1use crate::{ast, lexer, proto};
2
3/// Parse error type returned by [`parse`].
4pub type ParseError<'a> =
5    lalrpop_util::ParseError<usize, lexer::Token<'a>, lexer::LexicalError<'a>>;
6
7/// Result alias for parsing `.proto` sources.
8pub type ParseResult<'a> = Result<ast::Root<'a>, ParseError<'a>>;
9
10/// Parse a Protocol Buffers source string into an AST.
11///
12/// # Examples
13/// ```rust
14/// use protobuf_ast_parser::parse;
15///
16/// let source = r#"syntax = "proto3"; message User { string name = 1; }"#;
17/// let ast = parse(source).expect("valid proto");
18/// assert!(!ast.is_empty());
19/// ```
20#[allow(clippy::needless_lifetimes)]
21pub fn parse<'a>(data: &'a str) -> ParseResult<'a> {
22    let lexer = lexer::Lexer::new(data);
23    let parser = proto::RootParser::new();
24
25    parser.parse(data, lexer)
26}