Rust Mustache

mustache template library for rust
Alternatives To Rust Mustache
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Milk194856 years ago6May 08, 20114CoffeeScript
Milk is Mustache in CoffeeScript -- great with your browser or NodeJS!
Rust Mustache132241262 years ago12February 12, 201815otherRust
mustache template library for rust
Mustache84
24a year ago28March 23, 20227otherHaskell
Haskell implementation of mustache templates
Bart30543 months ago7January 05, 20237mitRust
A compile time templating language for Rust inspired by Mustache
Acutis20
2 days ago1mpl-2.0OCaml
A declarative, type-safe template language
Php Mustache8
10 years agoPHP
Mustache template parser, compiler and interpreter in PHP.
Tint4
3 months agomitJavaScript
A natural template engine for the HTML DOM
Cmustache4
12 years ago
C implementation of the Mustache logic-less templating language
Malline3
5 years agomitSwift
Templating engine for Swift, similar to Handlebars & Mustache.
Mustaml3
11 years ago1PHP
Mustaml is a html template language, logic-less and neat.
Alternatives To Rust Mustache
Select To Compare


Alternative Project Comparisons
Readme

Mustache Ohloh statistics Build Status

Inspired by ctemplate and et, Mustache is a framework-agnostic way to render logic-free views.

As ctemplates says, "It emphasizes separating logic from presentation: it is impossible to embed application logic in this template language."

rust-mustache is a rust implementation of Mustache.

Documentation

The different Mustache tags are documented at mustache(5).

Documentation for this library is here.

Install

Install it through Cargo!

[dependencies]
mustache = "*"

Basic example

#[macro_use]
extern crate serde_derive;
extern crate mustache;

use std::io;
use mustache::MapBuilder;

#[derive(Serialize)]
struct Planet {
    name: String,
}

fn main() {
    // First the string needs to be compiled.
    let template = mustache::compile_str("hello {{name}}").unwrap();

    // You can either use an encodable type to print "hello Mercury".
    let planet = Planet { name: "Mercury".into() };
    template.render(&mut io::stdout(), &planet).unwrap();
    println!("");

    // ... or you can use a builder to print "hello Venus".
    let data = MapBuilder::new()
        .insert_str("name", "Venus")
        .build();

    template.render_data(&mut io::stdout(), &data).unwrap();
    println!("");

    // ... you can even use closures.
    let mut planets = vec!("Jupiter", "Mars", "Earth");

    let data = MapBuilder::new()
        .insert_fn("name", move |_| {
            planets.pop().unwrap().into()
        })
        .build();

    // prints "hello Earth"
    template.render_data(&mut io::stdout(), &data).unwrap();
    println!("");

    // prints "hello Mars"
    template.render_data(&mut io::stdout(), &data).unwrap();
    println!("");

    // prints "hello Jupiter"
    template.render_data(&mut io::stdout(), &data).unwrap();
    println!("");
}

Testing

Simply clone and run:

# If you want to run the test cases, you'll need the spec as well.
git submodule init
git submodule update

cargo test

# If you want to test the readme example, we're currently using the unstable feature to do so.
cargo +nightly test --features unstable

Releasing

If cutting a new release, please follow something along the lines of the below:

# Assuming master is the current release commit, ideally it will be a commit
# announcing the release and the only change would be the version number.

# Ensure everything looks good
cargo publish --dry-run

# Actually publish
cargo publish

# Tag the release, prefix it with 'v' for easy tag searching, i.e. git tag --list 'v*'
git tag vX.Y.Z

git push --tags origin master

License

See LICENSE File

Popular Mustache Projects
Popular Template Language Projects
Popular Web User Interface Categories

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Rust
Mustache
Template Language