pub mod ast;
pub mod axes;
pub mod context;
pub mod eval;
pub mod functions;
pub mod lexer;
pub mod parser;
pub mod types;
use ast::{CompiledExpr, Expr};
use context::XPathContext;
use parser::parse_xpath;
use types::XPathValue;
pub fn compile(expr_str: &str) -> Option<CompiledExpr> {
match parse_xpath(expr_str) {
Ok(expr) => Some(CompiledExpr::new(expr_str.to_string(), expr)),
Err(_) => None,
}
}
pub fn evaluate(compiled: &CompiledExpr, context: &mut XPathContext) -> Option<XPathValue> {
eval::eval(context, &compiled.expr).ok()
}
pub fn evaluate_str(expr_str: &str, context: &mut XPathContext) -> Option<XPathValue> {
compile(expr_str).and_then(|compiled| evaluate(&compiled, context))
}