1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//! Ogma (named after the [this guy](https://en.wikipedia.org/wiki/Ogma)) is a library
//! to create Natural Language DSLs. Specifically, the library provides convenience macros
//! for wrapping a function with implementations to parse parameters from English.
//!
//! # Examples
//!
//! ```
//! # use ogma::vm::{Context, Trap};
//! # use ogma::object_query::Query;
//! # use ogma::given;
//! #[given(Add, "the addition of q`input` and d`constant` henceforth q`out`")]
//! fn add<'a>(
//! ctx: &mut Context,
//! input: &Vec<Query<'a>>,
//! constant: i32,
//! out: &Vec<Query<'a>>,
//! ) -> Result<(), Trap> {
//! // get global variable from `ctx` using `input`, add `constant` to it
//! // and save to `ctx` via `out`
//! Ok(())
//! }
//! ```
//!
//! which you can then use in a Script
//!
//! ```ignore
//! let mut ctx = bdd::Step::new();
//! let script = Module::compile(
//! &mut ctx,
//! r#"
//! Given the addition of the input and 2 henceforth the left
//! And the product of the input and 2 henceforth the right
//! When the left is equal to the right
//! Then do nothing
//! "#,
//! )
//! .unwrap();
//! let mut instance = script.instance();
//! instance.ctx_mut().set_global::<_, i32>("input", 2);
//! assert!(instance.exec().is_ok());
//! ```
extern crate std as core;
pub extern crate object_query;
pub use *;
pub use *;