35 releases (15 breaking)

0.15.0 Jul 30, 2018
0.14.2 Mar 16, 2018
0.13.6 Dec 29, 2017
0.12.0 Nov 29, 2017
0.0.1 Feb 15, 2015

#4 in Template engine

Download history 347/week @ 2018-09-18 367/week @ 2018-09-25 716/week @ 2018-10-02 839/week @ 2018-10-09 507/week @ 2018-10-16 588/week @ 2018-10-23 492/week @ 2018-10-30 806/week @ 2018-11-06 497/week @ 2018-11-13 656/week @ 2018-11-20 623/week @ 2018-11-27 851/week @ 2018-12-04 633/week @ 2018-12-11

1,250 downloads per month
Used in 10 crates (8 directly)

MIT license

345KB
9K SLoC

liquid-rust

Liquid templating for Rust

Travis Status Appveyor Status Crates Status Coverage Status Dependency Status

Usage

To include liquid in your project add the following to your Cargo.toml:

[dependencies]
liquid = "0.17"

Now you can use the crate in your code:

extern crate liquid;

Example:

extern crate liquid;

let template = liquid::ParserBuilder::with_liquid()
    .build()
    .parse("Liquid! {{num | minus: 2}}").unwrap();

let mut globals = liquid::value::Object::new();
globals.insert("num".into(), liquid::value::Value::scalar(4f64));

let output = template.render(&globals).unwrap();
assert_eq!(output, "Liquid! 2".to_string());

You can find a reference on Liquid syntax here.

Extending Liquid

Create your own filters

Creating your own filters is very easy. Filters are simply functions or closures that take an input Value and a Vec<Value> of optional arguments and return a Value to be rendered or consumed by chained filters.

See filters.rs for what a filter implementation looks like. You can then register it by calling liquid::ParserBuilder::filter.

Create your own tags

Tags are made up of two parts, the initialization and the rendering.

Initialization happens when the parser hits a Liquid tag that has your designated name. You will have to specify a function or closure that will then return a Renderable object to do the rendering.

See include_tag.rs for what a tag implementation looks like. You can then register it by calling liquid::ParserBuilder::tag.

Create your own tag blocks

Blocks work very similar to Tags. The only difference is that blocks contain other markup, which is why block initialization functions take another argument, a list of Elements that are inside the specified block.

See comment_block.rs for what a block implementation looks like. You can then register it by calling liquid::ParserBuilder::block.

Dependencies

~9.5MB
~227K SLoC