guidon
guidon is a french word for handlebars.
guidon is a small library which aims to speed up project initialization with templates.
guidon has a command line interface guic
[]
= "0.2"
guidon performs templating based on handlebars templating system.
Usage
Files to be handles needs to have an .hbs
extension. Folders and files names can be templatized too : {{folder/subfolder}}
The entry point is the Guidon structure.
Basic init
use Guidon;
use HashMap;
use PathBuf;
let mut guidon = new;
let mut vars = new;
vars.insert;
guidon.variables;
guidon.apply_template.unwrap;
With this initialization:
- guidon will use the vars map to find substitution values.
- guidon will parse the directory
path/to/template/dir/template
- the result will be written in
path/to/destination
TryNew init
guidon implements a TryNew trait to initialize from a dir or a git repo
TryNew from path
use ;
let mut guidon = try_new.unwrap;
With this initialization:
- guidon will init the substitution variables from
path/to/template/dir/variables.toml
- guidon will parse the directory
path/to/template/dir/template
use ;
let mut guidon = try_new.unwrap;
guidon.use_template_dir;
With this initialization:
- guidon will init the substitution variables from
path/to/template/dir/my_vars.toml
- guidon will parse the directory
path/to/template/dir
TryNew from git repo
use ;
let git = builder
.repo
.credentials
.build
.unwrap;
let mut guidon = try_new;
With this initialization
- guidon will clone the repo to a temporary directory
- guidon will init the substitutions variables from
tmp/dir/template.toml
- when applying template, guidon will parse the directory
tmp/dir/template
Template variables
The configuration file is structured as follows :
# Key value pairs for template substitution
[]
= "test 1"
= "test 2"
Features
The git initialization is a feature that can be deactivated.
In Cargo.toml
[]
= "0.2"
= false
Callbacks
guidon offers the possiblity to provide two callbacks :
- a variables callback to operate on the variables before applying the template
- a render callback, which is called if a missing value is detected while rendering the template.
These callbacks could be use for user interaction, or default behaviour.
Variable callback
In this example, the callback will add " cb"
to every value.
use Guidon;
use HashMap;
use PathBuf;
let cb = ;
let mut guidon = new;
guidon.set_variables_callback;
Render callback
In this example, the callback will replace any missing value by the key concatenated with "-cb"
use Guidon;
use HashMap;
use PathBuf;
// this callback will add `-cb` to the key as a value
let cb = ;
let mut guidon = new;
guidon.set_render_callback;
Templates
Templatized files must have the .hbs
extension. When rendered, this extension will be
deleted (eg. a MyHelloWord.java.hbs
file will be rendered as a MyHelloWorld.java
file).
Templatized values are declared with "mustaches" : {{myKey}}. Values for these keys can be provided by :
- a HashMap<K,V> provided by calling
Guidon::variables
- a
template.toml
file
Helpers
A single helper is currently provided : replace
. It's simply replace a string by another in the value.
Tell me :{{ replace my_var everybody world }}
with my_var="Hello everybody !
will render as
Tell me : Hello world !
.
File and Directory names
Filnames and directory can also be templatized.
Super-{{my_var}}-content.txt
will render as Super-boring-content.txt
given my_var="boring"
.
If the content of the file is templatized, we have Super-{{my_var}}-content.txt.hbs
.
template.toml structure
The template.toml structure is the following:
[]
="my value"
="oh my, I need to find an idea…"
Logs
guidon uses the log facade.
Minimum rust version
The minimum rust version is 1.38.0
License
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in guidon by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.