2020-06-04 16:39:33 -04:00
|
|
|
<div align="center">
|
|
|
|
|
|
|
|
![SailFish](./resources/logo.png)
|
|
|
|
|
|
|
|
Simple, small, and extremely fast template engine for Rust
|
|
|
|
|
2020-06-06 16:00:37 -04:00
|
|
|
[![Build Status](https://travis-ci.org/Kogia-sima/sailfish.svg?branch=master)](https://travis-ci.org/Kogia-sima/sailfish)
|
2020-06-09 08:47:06 -04:00
|
|
|
[![Build status](https://ci.appveyor.com/api/projects/status/fa3et4rft4dyvdn9/branch/master?svg=true)](https://ci.appveyor.com/project/Kogiasima/sailfish/branch/master)
|
2020-06-05 10:42:06 -04:00
|
|
|
[![Version](https://img.shields.io/crates/v/sailfish)](https://crates.io/crates/sailfish)
|
|
|
|
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/Kogia-sima/sailfish/blob/master/LICENSE)
|
|
|
|
|
2020-06-09 08:48:39 -04:00
|
|
|
[User Guide](https://sailfish.netlify.app/en/) | [API Docs](https://docs.rs/sailfish) | [Examples](./examples)
|
|
|
|
|
2020-06-04 16:39:33 -04:00
|
|
|
</div>
|
|
|
|
|
|
|
|
## ✨ Features
|
|
|
|
|
|
|
|
- Simple and intuitive syntax inspired by [EJS](https://ejs.co/)
|
|
|
|
- Relatively small number of dependencies (<15 crates in total)
|
2020-06-06 05:28:56 -04:00
|
|
|
- Extremely fast (See [benchmarks](./benches/README.md))
|
2020-06-04 16:39:33 -04:00
|
|
|
- Better error message
|
|
|
|
- Template rendering is always type-safe because templates are statically compiled.
|
|
|
|
- Syntax highlighting support ([vscode](./syntax/vscode), [vim](./syntax/vim))
|
|
|
|
- Automatically re-compile sources when template file is updated.
|
2020-06-16 11:08:40 -04:00
|
|
|
- Works on Rust 1.42 or later
|
2020-06-04 16:39:33 -04:00
|
|
|
|
|
|
|
## 🐟 Example
|
|
|
|
|
|
|
|
Dependencies:
|
|
|
|
|
|
|
|
```toml
|
|
|
|
[dependencies]
|
2020-06-14 23:17:19 -04:00
|
|
|
sailfish = "0.1.0"
|
|
|
|
sailfish-macros = "0.1.0"
|
2020-06-04 16:39:33 -04:00
|
|
|
```
|
|
|
|
|
|
|
|
Template file (templates/hello.stpl):
|
|
|
|
|
2020-06-08 00:14:09 -04:00
|
|
|
```erb
|
2020-06-04 16:39:33 -04:00
|
|
|
<DOCTYPE! html>
|
|
|
|
<html>
|
|
|
|
<body>
|
|
|
|
<%= content %>
|
|
|
|
</body>
|
|
|
|
</html>
|
|
|
|
```
|
|
|
|
|
|
|
|
Code:
|
|
|
|
|
|
|
|
```rust
|
|
|
|
#[macro_use]
|
|
|
|
extern crate sailfish_macros; // enable derive macro
|
|
|
|
|
|
|
|
use sailfish::TemplateOnce;
|
|
|
|
|
|
|
|
#[derive(TemplateOnce)]
|
|
|
|
#[template(path = "hello.stpl")]
|
|
|
|
struct Hello {
|
|
|
|
content: String
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
println!("{}", Hello { content: String::from("Hello, world!") }.render_once().unwrap());
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
You can find more examples in [examples](./examples) directory.
|
|
|
|
|
|
|
|
## 🐾 Roadmap
|
|
|
|
|
2020-06-07 00:41:08 -04:00
|
|
|
- `Template` trait ([RFC](https://github.com/Kogia-sima/sailfish/issues/3))
|
2020-06-04 16:39:33 -04:00
|
|
|
- Template inheritance (block, partials, etc.)
|
|
|
|
- Whitespace suppressing
|
2020-06-07 00:41:08 -04:00
|
|
|
- Filters ([RFC](https://github.com/Kogia-sima/sailfish/issues/2))
|
|
|
|
- Dynamic template compilation ([RFC](https://github.com/Kogia-sima/sailfish/issues/1))
|
2020-06-04 16:39:33 -04:00
|
|
|
- `format_templates!(fmt, args..)` macro
|
|
|
|
|
|
|
|
## 👤 Author
|
|
|
|
|
|
|
|
:jp: **Ryohei Machida**
|
|
|
|
|
|
|
|
* Github: [@Kogia-sima](https://github.com/Kogia-sima)
|
|
|
|
|
|
|
|
## 🤝 Contributing
|
|
|
|
|
|
|
|
Contributions, issues and feature requests are welcome!
|
|
|
|
|
|
|
|
Feel free to check [issues page](https://github.com/Kogia-sima/sailfish/issues).
|
|
|
|
|
|
|
|
## Show your support
|
|
|
|
|
|
|
|
Give a ⭐️ if this project helped you!
|
|
|
|
|
|
|
|
|
|
|
|
## 📝 License
|
|
|
|
|
|
|
|
Copyright © 2020 [Ryohei Machida](https://github.com/Kogia-sima).
|
|
|
|
|
|
|
|
This project is [MIT](https://github.com/Kogia-sima/sailfish/blob/master/LICENSE) licensed.
|
|
|
|
|
|
|
|
***
|
|
|
|
_This README was generated with ❤️ by [readme-md-generator](https://github.com/kefranabg/readme-md-generator)_
|