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
51
pub mod compiler {
    pub use liquid_compiler::*;
}
pub mod error {
    pub use liquid_error::*;
}
pub mod interpreter {
    pub use liquid_interpreter::*;
}
pub mod value {
    pub use liquid_value::*;
}

pub mod partials;

pub use liquid_compiler::Language;
pub use liquid_compiler::TagTokenIter;
pub use liquid_compiler::{BlockReflection, ParseBlock, TagBlock};
pub use liquid_compiler::{Filter, FilterParameters, FilterReflection, ParseFilter};
pub use liquid_compiler::{ParseTag, TagReflection};
pub use liquid_derive::{
    Display_filter, FilterParameters, FilterReflection, FromFilterParameters, ParseFilter,
};
pub use liquid_error::{Error, Result};
pub use liquid_interpreter::Expression;
pub use liquid_interpreter::Renderable;
pub use liquid_interpreter::Runtime;
pub use liquid_interpreter::Template;
pub use liquid_value::{object, to_object, Object};
pub use liquid_value::{to_value, value, Value, ValueCow};
pub use liquid_value::{ObjectView, ValueView};

#[allow(unused_macros)]
#[macro_export]
macro_rules! call_filter {
    ($filter:expr, $input:expr) => {{
        $crate::call_filter!($filter, $input, )
    }};
    ($filter:expr, $input:expr, $($args:expr),*) => {{
        let positional = Box::new(vec![$($crate::Expression::Literal($crate::value!($args))),*].into_iter());
        let keyword = Box::new(Vec::new().into_iter());
        let args = $crate::compiler::FilterArguments { positional, keyword };

        let runtime = $crate::Runtime::default();

        let input = $crate::value!($input);

        $crate::ParseFilter::parse(&$filter, args)
            .and_then(|filter| $crate::Filter::evaluate(&*filter, &input, &runtime))
    }};
}