| .github | ||
| assets/javascripts/workers/templates | ||
| benches | ||
| docs | ||
| examples | ||
| resources | ||
| sailfish | ||
| sailfish-compiler | ||
| sailfish-macros | ||
| sailfish-tests/integration-tests | ||
| scripts | ||
| syntax | ||
| .gitattributes | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| codecov.yml | ||
| LICENSE | ||
| netlify.toml | ||
| README.md | ||
| requirements.txt | ||
| runtime.txt | ||
| rustfmt.toml | ||
| THIRD_PARTY | ||
✨ 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.60 or later
🐟 Example
Dependencies:
[dependencies]
sailfish = "0.9.0"
You can choose to use TemplateSimple to access fields directly:
Template file (templates/hello.stpl):
<html> <body> <% for msg in messages { %> <div><%= msg %></div> <% } %> </body> </html>Code:
use sailfish::TemplateSimple; #[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_to_string().unwrap()); }
Or use the more powerful Template/TemplateMut/TemplateOnce:
Template file (templates/hello.stpl):
<html> <body> <% for msg in &self.messages { %> <div><%= msg %></div> <% } %> <div><%= self.say_hello() %></div> </body> </html>Code:
use sailfish::Template; #[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()); }
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
