#template

bin+lib germinate

A templating library for injecting variables from multiple external sources

4 releases (breaking)

✓ Uses Rust 2018 edition

new 0.4.0 May 27, 2020
0.3.0 May 25, 2020
0.2.0 May 19, 2020
0.1.0 May 18, 2020

#41 in Template engine

GPL-3.0 license

50KB
446 lines

germinate

Crates.io docs.rs GitHub Workflow Status (branch) Crates.io

This crate provides a method of injecting variables from multiple external sources into a template string. Sources can be anything as long as they implement the Loader trait which handles the loading of the variables in a standard way.

Sources

Built In

These are the currently implemented sources and their associated template keys

Source Key Description
AWS EC2 Instance Tags awsec2tag Load the value of AWS EC2 Instance Tags by their key
AWS EC2 Metadata Service awsec2metadata Load a value from the AWS EC2 Metadata Service by it's path
Environment Variables env Load the value of an environment variable

Example

let mut seed = Seed::new("Hi %env:NAME%!");
let output = seed.germinate().await?;

assert_eq!("Hi John!", output);

Custom Sources

You can also include your own sources using the Seed::add_custom_loader method. The only requirement is that the custom loader must implement the Loader trait

Example

let mut seed = Seed::new("Hi %name:name%");

// Add a custom loader for the name key. This is the loader that will be used whenever
// germinate finds %name:...% in the template string
seed.add_custom_loader("name".to_string(), Box::new(NameLoader {}));

let output = seed.germinate().await?;

assert_eq!("Hi John", output);

Binary

Germinate provides a CLI for templating files, available from the Github releases. To run the CLI, cimply download the binary for your system and check the usage with germinate --help

Example

The CLI can be used to parse an template file and output it either to stdout or optionally, an output file

# To print the parsed result to stdout
germinate myfile.txt.tmpl

# To write the output to a file
germinate myfile.txt.tmpl -o myfile.txt

License

GPL-3.0

Dependencies

~20MB
~406K SLoC