liquid 0.21.1

The liquid templating language for Rust
Documentation
use liquid::ObjectView;
use liquid::ValueView;

#[derive(ObjectView, ValueView, serde::Serialize, serde::Deserialize, Debug)]
struct TestEmpty {}

#[test]
fn test_empty_value() {
    let uut = TestEmpty {};

    assert_eq!(uut.render().to_string(), "");
    assert_eq!(uut.source().to_string(), "{}");
    assert_eq!(uut.type_name(), "object");
    assert_eq!(uut.query_state(liquid::model::State::Truthy), true);
    assert_eq!(uut.query_state(liquid::model::State::DefaultValue), true);
    assert_eq!(uut.query_state(liquid::model::State::Empty), true);
    assert_eq!(uut.query_state(liquid::model::State::Blank), true);
    assert_eq!(uut.to_kstr(), "");
    assert_eq!(uut.to_value(), liquid::model::value!({}));
    assert!(uut.as_object().is_some());
}

#[test]
fn test_empty_object() {
    let uut = TestEmpty {};

    assert_eq!(uut.size(), 0);
    assert!(uut.keys().collect::<Vec<_>>().is_empty());
    assert!(uut.values().collect::<Vec<_>>().is_empty());
    assert!(uut.iter().collect::<Vec<_>>().is_empty());
    assert_eq!(uut.contains_key("non-existent"), false);
    assert!(uut.get("non-existent").is_none());
}

#[derive(ObjectView, ValueView, serde::Serialize, serde::Deserialize, Debug)]
struct TestStatic {
    boolean: bool,
    int: i64,
    float: f64,
    static_str: &'static str,
    string: String,
    kstring: kstring::KString,
    array: Vec<i64>,
}

impl TestStatic {
    fn non_default() -> Self {
        Self {
            boolean: true,
            int: 5,
            float: 4.2,
            static_str: "Hello world",
            string: String::from("Goodbye world"),
            kstring: kstring::KString::from_static("foo"),
            array: vec![1, 2, 3],
        }
    }
}

#[test]
fn test_static_value() {
    let uut = TestStatic::non_default();

    assert_ne!(uut.render().to_string(), "");
    assert_ne!(uut.source().to_string(), "{}");
    assert_eq!(uut.type_name(), "object");
    assert_eq!(uut.query_state(liquid::model::State::Truthy), true);
    assert_eq!(uut.query_state(liquid::model::State::DefaultValue), false);
    assert_eq!(uut.query_state(liquid::model::State::Empty), false);
    assert_eq!(uut.query_state(liquid::model::State::Blank), false);
    assert_ne!(uut.to_kstr(), "");
    assert_ne!(uut.to_value(), liquid::model::value!({}));
    assert!(uut.as_object().is_some());
}

#[test]
fn test_static_object() {
    let uut = TestStatic::non_default();

    assert_eq!(uut.size(), 7i64);
    assert!(!uut.keys().collect::<Vec<_>>().is_empty());
    assert!(!uut.values().collect::<Vec<_>>().is_empty());
    assert!(!uut.iter().collect::<Vec<_>>().is_empty());
    assert_eq!(uut.contains_key("non-existent"), false);
    assert_eq!(uut.contains_key("boolean"), true);
    assert!(uut.get("boolean").is_some());
}

#[derive(ObjectView, ValueView, serde::Serialize, serde::Deserialize, Debug)]
struct TestBorrow<'s> {
    s: &'s str,
}

#[test]
fn test_borrow_value() {
    let fixture = String::from("foo");
    let uut = TestBorrow {
        s: fixture.as_str(),
    };

    assert!(uut.as_object().is_some());
}

#[test]
fn test_borrow_object() {
    let fixture = String::from("foo");
    let uut = TestBorrow {
        s: fixture.as_str(),
    };

    assert_eq!(uut.size(), 1i64);
    assert!(!uut.keys().collect::<Vec<_>>().is_empty());
    assert!(!uut.values().collect::<Vec<_>>().is_empty());
    assert!(!uut.iter().collect::<Vec<_>>().is_empty());
    assert_eq!(uut.contains_key("non-existent"), false);
    assert_eq!(uut.contains_key("s"), true);
    assert!(uut.get("s").is_some());
}