pub mod prelude;
pub use jetro_core::{
Compiler, Engine, EvalError, Expr, Graph, Jetro, JetroSchema, Method, MethodRegistry,
ParseError, Program, VM,
};
pub use jetro_core::ast;
pub use jetro_core::eval;
pub use jetro_core::parser;
pub use jetro_core::vm;
#[cfg(feature = "macros")]
pub use jetro_macros::{jetro, JetroSchema};
use serde_json::Value;
use std::sync::Arc;
#[derive(Debug)]
pub enum Error {
Parse(ParseError),
Eval(EvalError),
}
pub type Result<T> = std::result::Result<T, Error>;
impl std::fmt::Display for Error {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Error::Parse(e) => write!(f, "{}", e),
Error::Eval(e) => write!(f, "{}", e),
}
}
}
impl std::error::Error for Error {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
Error::Parse(e) => Some(e),
Error::Eval(_) => None,
}
}
}
impl From<ParseError> for Error { fn from(e: ParseError) -> Self { Error::Parse(e) } }
impl From<EvalError> for Error { fn from(e: EvalError) -> Self { Error::Eval(e) } }
impl From<jetro_core::Error> for Error {
fn from(e: jetro_core::Error) -> Self {
match e {
jetro_core::Error::Parse(p) => Error::Parse(p),
jetro_core::Error::Eval(v) => Error::Eval(v),
}
}
}
pub fn query(expr: &str, doc: &Value) -> Result<Value> {
Ok(jetro_core::query(expr, doc)?)
}
pub fn query_with(expr: &str, doc: &Value, registry: Arc<MethodRegistry>) -> Result<Value> {
Ok(jetro_core::query_with(expr, doc, registry)?)
}