xkb_parser/
lib.rs

1pub use crate::xkb::{Rule, XkbParser};
2pub use ast::File as Xkb;
3use from_pest::FromPest;
4use pest::Parser;
5use std::error::Error;
6
7pub fn parse(file: &str) -> Result<Xkb, Box<dyn Error>> {
8    let mut parse_tree = XkbParser::parse(Rule::file, file)?;
9    let syntax_tree =
10        Xkb::from_pest(&mut parse_tree).map_err(|e| format!("ast generation failed: {:?}", e))?;
11
12    Ok(syntax_tree)
13}
14
15pub(crate) mod xkb {
16    #[derive(Debug, Clone, pest_derive::Parser)]
17    #[grammar = "xkb.pest"]
18    pub struct XkbParser;
19}
20
21pub mod ast;