1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
pub use crate::xkb::{Rule, XkbParser};
pub use ast::File as Xkb;
use from_pest::FromPest;
use pest::Parser;
use std::error::Error;

pub fn parse(file: &str) -> Result<Xkb, Box<dyn Error>> {
    let mut parse_tree = XkbParser::parse(Rule::file, file)?;
    let syntax_tree =
        Xkb::from_pest(&mut parse_tree).map_err(|e| format!("ast generation failed: {:?}", e))?;

    Ok(syntax_tree)
}

pub(crate) mod xkb {
    #[derive(Debug, Clone, pest_derive::Parser)]
    #[grammar = "xkb.pest"]
    pub struct XkbParser;
}

pub mod ast;