sailfish-macros-0.9.0/Cargo.toml0000644000000022630000000000100121270ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2018" name = "sailfish-macros" version = "0.9.0" authors = ["Ryohei Machida "] description = "Simple, small, and extremely fast template engine for Rust" homepage = "https://github.com/rust-sailfish/sailfish" readme = "README.md" keywords = [ "markup", "template", "html", ] categories = ["template-engine"] license = "MIT" repository = "https://github.com/rust-sailfish/sailfish" [lib] name = "sailfish_macros" test = false doctest = false proc-macro = true [dependencies.proc-macro2] version = "1.0.56" [dependencies.sailfish-compiler] version = "0.9.0" features = ["procmacro"] default-features = false [features] config = ["sailfish-compiler/config"] default = ["config"] sailfish-macros-0.9.0/Cargo.toml.orig000075500000000000000000000016211046102023000156100ustar 00000000000000[package] name = "sailfish-macros" version = "0.9.0" authors = ["Ryohei Machida "] description = "Simple, small, and extremely fast template engine for Rust" homepage = "https://github.com/rust-sailfish/sailfish" repository = "https://github.com/rust-sailfish/sailfish" readme = "../README.md" keywords = ["markup", "template", "html"] categories = ["template-engine"] license = "MIT" workspace = ".." edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [lib] name = "sailfish_macros" proc-macro = true test = false doctest = false [features] default = ["config"] # enable configuration file (sailfish.toml) support config = ["sailfish-compiler/config"] [dependencies] proc-macro2 = "1.0.56" [dependencies.sailfish-compiler] path = "../sailfish-compiler" version = "0.9.0" default-features = false features = ["procmacro"] sailfish-macros-0.9.0/README.md000075500000000000000000000071771046102023000142140ustar 00000000000000
![SailFish](./resources/logo.png) Simple, small, and extremely fast template engine for Rust ![Tests](https://github.com/rust-sailfish/sailfish/workflows/Tests/badge.svg)![Version](https://img.shields.io/crates/v/sailfish)![dependency status](https://deps.rs/repo/github/rust-sailfish/sailfish/status.svg)![Rust 1.60](https://img.shields.io/badge/rust-1.60+-lightgray.svg)![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg) [User Guide](https://rust-sailfish.github.io/sailfish/) | [API Docs](https://docs.rs/sailfish) | [Examples](./examples)
## ✨ Features - Simple and intuitive syntax inspired by [EJS](https://ejs.co/) - Include another template file inside template - Built-in filters - Minimal dependencies (<15 crates in total) - Extremely fast (See [benchmarks](https://github.com/djc/template-benchmarks-rs)) - Better error message - Syntax highlighting support ([vscode](./syntax/vscode), [vim](./syntax/vim)) - Works on Rust 1.60 or later ## 🐟 Example Dependencies: ```toml [dependencies] sailfish = "0.9.0" ``` You can choose to use `TemplateSimple` to access fields directly: > Template file (templates/hello.stpl): > > ```erb > > > <% for msg in messages { %> >
<%= msg %>
> <% } %> > > > ``` > > Code: > > ```rust > use sailfish::TemplateSimple; > > #[derive(TemplateSimple)] > #[template(path = "hello.stpl")] > struct HelloTemplate { > messages: Vec > } > > fn main() { > let ctx = HelloTemplate { > messages: vec![String::from("foo"), String::from("bar")], > }; > println!("{}", ctx.render_once().unwrap()); > } > ``` Or use the more powerful `Template/TemplateMut/TemplateOnce`: > Template file (templates/hello.stpl): > > ```erb > > > <% for msg in &self.messages { %> >
<%= msg %>
> <% } %> >
<%= self.say_hello() %>
> > > ``` > > Code: > > ```rust > use sailfish::Template; > > #[derive(Template)] > #[template(path = "hello.stpl")] > struct HelloTemplate { > messages: Vec > } > > 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](./examples) directory. ## 🐾 Roadmap - `Template` trait ([RFC](https://github.com/rust-sailfish/sailfish/issues/3)) - Template inheritance (block, partials, etc.) ## 👤 Author 🇯🇵 **Ryohei Machida** * GitHub: [@Kogia-sima](https://github.com/Kogia-sima) ## 🤝 Contributing Contributions, issues and feature requests are welcome! Since sailfish is an immature library, there are many [planned features](https://github.com/rust-sailfish/sailfish/labels/Type%3A%20RFC) 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](https://github.com/rust-sailfish/sailfish/issues?q=is%3Aissue+is%3Aopen+label%3A%22Status%3A+PR+Welcome%22) label, and [let's create a new pull request](https://github.com/rust-sailfish/sailfish/pulls)! ## 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/rust-sailfish/sailfish/blob/master/LICENSE) licensed. --- *This README was generated with ❤️ by [readme-md-generator](https://github.com/kefranabg/readme-md-generator)*sailfish-macros-0.9.0/src/lib.rs000064400000000000000000000023051046102023000146210ustar 00000000000000#![forbid(unsafe_code)] extern crate proc_macro; use proc_macro::TokenStream; #[proc_macro_derive(TemplateOnce, attributes(template))] pub fn derive_template_once(tokens: TokenStream) -> TokenStream { let input = proc_macro2::TokenStream::from(tokens); let output = sailfish_compiler::procmacro::derive_template_once(input); TokenStream::from(output) } #[proc_macro_derive(TemplateMut, attributes(template))] pub fn derive_template_mut(tokens: TokenStream) -> TokenStream { let input = proc_macro2::TokenStream::from(tokens); let output = sailfish_compiler::procmacro::derive_template_mut(input); TokenStream::from(output) } #[proc_macro_derive(Template, attributes(template))] pub fn derive_template(tokens: TokenStream) -> TokenStream { let input = proc_macro2::TokenStream::from(tokens); let output = sailfish_compiler::procmacro::derive_template(input); TokenStream::from(output) } #[proc_macro_derive(TemplateSimple, attributes(template))] pub fn derive_template_simple(tokens: TokenStream) -> TokenStream { let input = proc_macro2::TokenStream::from(tokens); let output = sailfish_compiler::procmacro::derive_template_simple(input); TokenStream::from(output) }