Skip to content
/ funcfmt Public

A simple templating crate that allows passing in custom data to functions through function traits.

License

Notifications You must be signed in to change notification settings

cdown/funcfmt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

87 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

funcfmt | Tests

funcfmt is a simple, lightweight templating library that allows templating using custom runtime context and function traits. It was originally created for exifrename, to allow efficiently processing a format and set of callbacks across thousands of EXIF objects.

Documentation

Documentation is available on docs.rs, or through cargo doc --open.

Usage

To add funcfmt to your dependencies:

cargo add funcfmt

The basic flow of funcfmt looks like this:

  1. Given a FormatMap<T> called formatters, call formatters.to_format_pieces(), which preprocesses everything into a FormatPieces<T>, where &T is what your callback function will take as its only argument. This allows avoiding having to reparse the formatters and go through the template each time things are processed.
  2. Call .render(data) on the FormatPieces<T>.

A very small example with Strings passed in, although you can pass an object of any type:

use funcfmt::{fm, FormatMap, Render, ToFormatPieces};

fn main() {
    let formatters = FormatMap::from([
        fm!("foo", |data| Some(format!("foo: {data}"))),
        fm!("bar", |data| Some(format!("bar: {data}"))),
        fm!("baz", |data| Some(format!("baz: {data}"))),
    ]);

    let fp = formatters.to_format_pieces("{foo}, {bar}").unwrap();

    // foo: some data, bar: some data
    let data_one = String::from("some data");
    println!("{}", fp.render(&data_one).unwrap());

    // foo: other data, bar: other data
    // note that this doesn't require processing the format again
    let data_two = String::from("other data");
    println!("{}", fp.render(&data_two).unwrap());
}

About

A simple templating crate that allows passing in custom data to functions through function traits.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages