Simple, small, and extremely fast template engine for Rust
โจ Features
- Simple and intuitive syntax inspired by EJS
- Include another template file inside template
- Built-in filters
- Minimal dependencies (<15 crates in total)
- Extremely fast (See benchmarks)
- Better error message
- Syntax highlighting support (vscode, vim)
- Works on Rust 1.89 or later
๐ Example
Dependencies:
[dependencies]
sailfish = "0.11.2"
You can choose to use TemplateSimple to access fields directly:
Template file (templates/hello.stpl):>
> <body> > <% for msg in messages { %> > <div><%= msg %></div> > <% } %> > </body> > </html> > >> <html>
Code:>
> > #[derive(TemplateSimple)] > #[template(path = "hello.stpl")] > struct HelloTemplate { > messages: Vec<String> > } > > fn main() { > let ctx = HelloTemplate { > messages: vec![String::from("foo"), String::from("bar")], > }; > println!("{}", ctx.render_once().unwrap()); > } >> use sailfish::TemplateSimple;
Or use the more powerful Template/TemplateMut/TemplateOnce:
Template file (templates/hello.stpl):>
> <body> > <% for msg in &self.messages { %> > <div><%= msg %></div> > <% } %> > <div><%= self.say_hello() %></div> > </body> > </html> > >> <html>
Code:>
> > #[derive(Template)] > #[template(path = "hello.stpl")] > struct HelloTemplate { > messages: Vec<String> > } > > impl HelloTemplate { > fn say_hello(&self) -> String { > String::from("Hello!") > } > } > > fn main() { > let ctx = HelloTemplate { > messages: vec![String::from("foo"), String::from("bar")], > }; > println!("{}", ctx.render().unwrap()); > } >> use sailfish::Template;
You can find more examples in examples directory.
๐พ Roadmap
Templatetrait (RFC)- Template inheritance (block, partials, etc.)
๐ค Author
๐ฏ๐ต Ryohei Machida
- GitHub: @Kogia-sima
๐ค Contributing
Contributions, issues and feature requests are welcome!
Since sailfish is an immature library, there are many planned features that is on a stage of RFC. Please leave a comment if you have an idea about its design!
Also I welcome any pull requests to improve sailfish! Find issues with Status: PR Welcome label, and let's create a new pull request!
Show your support
Give a โญ๏ธ if this project helped you!
๐ License
Copyright ยฉ 2020 Ryohei Machida.
This project is MIT licensed.
This README was generated with โค๏ธ by readme-md-generator
Documentation Deployment Instructions
sudo apt install mkdocs mkdocs-material
cd sailfishrootfolder &&
cd docs && cd en
mkdocs build