7 unstable releases (3 breaking)

0.4.1 Sep 19, 2024
0.4.0 Sep 1, 2024
0.3.1 Aug 16, 2024
0.3.0 Jun 25, 2024
0.1.0 May 13, 2024

#205 in Template engine

Download history 51/week @ 2024-07-29 4/week @ 2024-08-05 213/week @ 2024-08-12 118/week @ 2024-08-19 97/week @ 2024-08-26 197/week @ 2024-09-02 10/week @ 2024-09-09 160/week @ 2024-09-16 195/week @ 2024-09-23 204/week @ 2024-09-30 49/week @ 2024-10-07 13/week @ 2024-10-14 43/week @ 2024-10-21 1/week @ 2024-10-28 3/week @ 2024-11-04 23/week @ 2024-11-11

71 downloads per month
Used in 5 crates (2 directly)

MPL-2.0 license

56KB
1K SLoC

Ribboncurls

Ribboncurls logo

Matrix Chat Crates.io Tests

Ribboncurls is a Rust library for rendering Mustache templates. Ribboncurls is passing all 136 of the Mustache v1.4.2 spec tests.

Note: Ribboncurls library public API is subject to change, so use with caution.

Usage

Basic Usage

let template = r#"Hello, {{name}}!"#;
let data = r#"{"name": "world"}"#;
let result = ribboncurls::render(template, data, None).unwrap();
assert_eq!(result, "Hello, world!");

With Partials

The following is to make use of Mustache partials:

let partials = r#"header: <header>Some header partial</header>
footer: <footer>Footer partial content goes here</footer>"#;
let template = r#"{{> header}}
Hello, {{name}}!
{{> footer}}"#;
let data = r#"{"name": "world"}"#;
let result = ribboncurls::render(template, data, Some(partials)).unwrap();
assert_eq!(result, r#"<header>Some header partial</header>Hello, world!
<footer>Footer partial content goes here</footer>"#);

Advanced usage

Have a look at the Mustache specification for more detailed Mustache information. Ribboncurls support all required features mentioned there.

Mustache spec tests

Ribboncurls runs the Mustache spec tests against the Ribboncurls lib and Ribboncurls passes all required 136 of 136 tests.

Tests ✅ comments::indented_inline
✅ comments::indented_multiline_standalone
✅ comments::indented_standalone
✅ comments::inline
✅ comments::multiline
✅ comments::multiline_standalone
✅ comments::standalone
✅ comments::standalone_line_endings
✅ comments::standalone_without_newline
✅ comments::standalone_without_previous_line
✅ comments::surrounding_whitespace
✅ comments::variable_name_collision
✅ delimiters::indented_standalone_tag
✅ delimiters::inverted_sections
✅ delimiters::outlying_whitespace_inline
✅ delimiters::pair_behavior
✅ delimiters::pair_with_padding
✅ delimiters::partial_inheritence
✅ delimiters::post_partial_behavior
✅ delimiters::sections
✅ delimiters::special_characters
✅ delimiters::standalone_line_endings
✅ delimiters::standalone_tag
✅ delimiters::standalone_without_newline
✅ delimiters::standalone_without_previous_line
✅ delimiters::surrounding_whitespace
✅ interpolation::ampersand
✅ interpolation::ampersand_context_miss_interpolation
✅ interpolation::ampersand_decimal_interpolation
✅ interpolation::ampersand_integer_interpolation
✅ interpolation::ampersand_null_interpolation
✅ interpolation::ampersand_standalone
✅ interpolation::ampersand_surrounding_whitespace
✅ interpolation::ampersand_with_padding
✅ interpolation::basic_context_miss_interpolation
✅ interpolation::basic_decimal_interpolation
✅ interpolation::basic_integer_interpolation
✅ interpolation::basic_interpolation
✅ interpolation::basic_null_interpolation
✅ interpolation::dotted_names_ampersand_interpolation
✅ interpolation::dotted_names_arbitrary_depth
✅ interpolation::dotted_names_are_never_single_keys
✅ interpolation::dotted_names_basic_interpolation
✅ interpolation::dotted_names_broken_chain_resolution
✅ interpolation::dotted_names_broken_chains
✅ interpolation::dotted_names_context_precedence
✅ interpolation::dotted_names_initial_resolution
✅ interpolation::dotted_names_no_masking
✅ interpolation::dotted_names_triple_mustache_interpolation
✅ interpolation::html_escaping
✅ interpolation::implicit_iterators_ampersand
✅ interpolation::implicit_iterators_basic_integer_interpolation
✅ interpolation::implicit_iterators_basic_interpolation
✅ interpolation::implicit_iterators_html_escaping
✅ interpolation::implicit_iterators_triple_mustache
✅ interpolation::interpolation_standalone
✅ interpolation::interpolation_surrounding_whitespace
✅ interpolation::interpolation_with_padding
✅ interpolation::no_interpolation
✅ interpolation::no_re_interpolation
✅ interpolation::triple_mustache
✅ interpolation::triple_mustache_context_miss_interpolation
✅ interpolation::triple_mustache_decimal_interpolation
✅ interpolation::triple_mustache_integer_interpolation
✅ interpolation::triple_mustache_null_interpolation
✅ interpolation::triple_mustache_standalone
✅ interpolation::triple_mustache_surrounding_whitespace
✅ interpolation::triple_mustache_with_padding
✅ inverted::context
✅ inverted::context_misses
✅ inverted::dotted_names_broken_chains
✅ inverted::dotted_names_falsey
✅ inverted::dotted_names_truthy
✅ inverted::doubled
✅ inverted::empty_list
✅ inverted::falsey
✅ inverted::indented_inline_sections
✅ inverted::internal_whitespace
✅ inverted::list
✅ inverted::nested_falsey
✅ inverted::nested_truthy
✅ inverted::null_is_falsey
✅ inverted::padding
✅ inverted::standalone_indented_lines
✅ inverted::standalone_line_endings
✅ inverted::standalone_lines
✅ inverted::standalone_without_newline
✅ inverted::standalone_without_previous_line
✅ inverted::surrounding_whitespace
✅ inverted::truthy
✅ partials::basic_behavior
✅ partials::context
✅ partials::failed_lookup
✅ partials::inline_indentation
✅ partials::nested
✅ partials::padding_whitespace
✅ partials::recursion
✅ partials::standalone_indentation
✅ partials::standalone_line_endings
✅ partials::standalone_without_newline
✅ partials::standalone_without_previous_line
✅ partials::surrounding_whitespace
✅ sections::context
✅ sections::context_misses
✅ sections::deeply_nested_contexts
✅ sections::dotted_names_broken_chains
✅ sections::dotted_names_falsey
✅ sections::dotted_names_truthy
✅ sections::doubled
✅ sections::empty_list
✅ sections::falsey
✅ sections::implicit_iterator_ampersand
✅ sections::implicit_iterator_array
✅ sections::implicit_iterator_decimal
✅ sections::implicit_iterator_html_escaping
✅ sections::implicit_iterator_integer
✅ sections::implicit_iterator_root_level
✅ sections::implicit_iterator_string
✅ sections::implicit_iterator_triple_mustache
✅ sections::indented_inline_sections
✅ sections::indented_standalone_lines
✅ sections::internal_whitespace
✅ sections::list
✅ sections::list_contexts
✅ sections::nested_falsey
✅ sections::nested_truthy
✅ sections::null_is_falsey
✅ sections::padding
✅ sections::parent_contexts
✅ sections::standalone_line_endings
✅ sections::standalone_lines
✅ sections::standalone_without_newline
✅ sections::standalone_without_previous_line
✅ sections::surrounding_whitespace
✅ sections::truthy
✅ sections::variable_test

License

Ribboncurls is licensed under the MPL-2.0 license.

Third-Party Licenses

This project includes third-party code licensed under the MPL-2.0 license. See the THIRD_PARTY_LICENSES file for details.

Dependencies

~4–6MB
~115K SLoC