jmespath_community 0.1.1

JMESPath is a query and transformation language for JSON
Documentation
//! JMESPath Community is [the community implementation](https://jmespath.site/) of JMESPath,
//! a query and transformation language for JSON.
//!
//! # Evaluating JMESPath Expression
//!
//! Use the [search](crate::search) function to evaluate a JMESPath expression.
//!
//! ## Example
//! ```rust
//! use jmespath_community as jmespath;
//! use jmespath::{search, Value};
//!
//!// Parse some JSON data into a JMESPath variable
//!let json_str = "{\"foo\":{\"bar\":{\"baz\":true}}}";
//!let data = Value::from_json(json_str).unwrap();
//!
//!let result = search("foo.bar | baz", &data).unwrap();
//!assert_eq!(true, result);
//! ```
//!
//! A JMESPath expression can be parsed once and evaluated
//! multiple times using the [parse](crate::parser::parse) function.
//!
//! ## Example
//! ```rust
//! use jmespath_community as jmespath;
//! use jmespath::{parse, Value};
//!
//! let ast = parse("foo").unwrap();
//! let data = Value::from_json(r#"{"foo": "bar"}"#).unwrap();
//! let result = ast.search(&data).unwrap();
//! assert_eq!("bar", result);
//! ```
//!
//! # Registering Custom Functions
//!
//! JMESPath Community comes with a host of useful [builtin functions](https://jmespath.site/main/#functions).
//! However, it can be extended with [third-party functions](crate::function).
//!
//! ## Example
//! ```rust
//! mod custom_functions {
//!
//!		use jmespath_community as jmespath;
//!
//!     use jmespath::function;
//!
//!     use jmespath::errors::Error as RuntimeError;
//!
//!     use jmespath::FunctionContext;
//!     use jmespath::Value;
//!
//!     use jmespath::functions::ReturnValue;
//!     use jmespath::functions::Function;
//!
//!     use jmespath::functions::DataType;
//!     use jmespath::functions::ParamTypes::*;
//!     use jmespath::functions::Parameter;
//!     use jmespath::functions::Parameter::*;
//!
//!     function!(
//!         add,
//!         [
//!             left => Required(Of(DataType::Number)),
//!             right => Required(Of(DataType::Number))
//!         ],
//!         arguments,
//!         {
//!             // type checking has been performed by the runtime
//!             // safe to unwrap
//!
//!             let i = arguments[0].as_f64().unwrap();
//!             let j = arguments[1].as_f64().unwrap();
//!
//!             Value::from_f64(i + j)
//!         }
//!     );
//! }
//! ```
//!
//! Create a new instance of the JMESPath [Runtime](crate::Runtime) object and
//! register your custom function:
//!
//! ## Example
//! ```compile_fail
//! use jmespath_community as jmespath;
//! use jmespath::FunctionRegistrar;
//! use jmespath::{Runtime, Value};
//!
//! let add = Box::new(custom_functions::add::new());
//! let mut runtime = Runtime::create_runtime();
//! runtime.register(add);
//!
//! let expression = "foo";
//! let root = Value::Null;
//! let result = runtime.search(expression, &root).unwrap();
//!
//! assert_eq!(None, result);
//! ```
mod api;
mod lexer;
mod parser;
mod registry;
mod scopes;
mod utils;

/// Contains the types supporting error handling for this crate.
pub mod errors;
/// Defines the builtin JMESPath function implementations and
/// various helpers for authoring custom third-party functions.
pub mod functions;
/// Contains the main JMESPath expression interpreter.
pub(crate) mod interpreter;

pub(crate) mod runtime;

pub(crate) mod value;
pub(crate) mod value_eq;
pub(crate) mod value_from;
pub(crate) mod value_option;

/// A type that represents a JMESPath function that can be stored
/// into a thread-safe registry.
pub type JmesPathFunction = dyn crate::functions::Function + Send + Sync;

pub use api::*;

pub use utils::map::Map;
pub use utils::Number;

pub use errors::Error;
pub use parser::parse;
pub use parser::NodeType;
pub use parser::Slice;
pub use parser::AST;
pub use runtime::ByFunctionHolder;
pub use runtime::FunctionContext;
pub use runtime::FunctionRegistrar;
pub use runtime::Runtime;
pub use value::Value;