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-05 10:42:06 -04:00
[![Version ](https://img.shields.io/crates/v/sailfish )](https://crates.io/crates/sailfish)
2020-06-06 12:34:36 -04:00
[![docs ](https://docs.rs/sailfish/badge.svg )](https://docs.rs/sailfish)
2020-06-05 10:42:06 -04:00
[![License: MIT ](https://img.shields.io/badge/License-MIT-yellow.svg )](https://github.com/Kogia-sima/sailfish/blob/master/LICENSE)
[![PRs Welcome ](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square )](http://makeapullrequest.com)
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.
:warning: Currentry sailfish is in early-stage development. You can use this library but be sure that there might be some bugs. Also API is still unstable, and thus may changes frequently.
## 🐟 Example
Dependencies:
```toml
[dependencies]
2020-06-06 06:26:32 -04:00
sailfish = "0.0.2"
2020-06-04 16:39:33 -04:00
sailfish-macros = "0.0.1"
```
Template file (templates/hello.stpl):
```html
< 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
- `Template` trait ([RFC](https://github.com/Kogia-sima/sailfish/blob/master/docs/rfcs/3-template-trait.md))
- Template inheritance (block, partials, etc.)
- Include another templates without copy
- Whitespace suppressing
- HTML minification
- Filters
- Dynamic template compilation ([RFC](https://github.com/Kogia-sima/sailfish/blob/master/docs/rfcs/1-dynamic-loading.md))
- `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 )_