microtemplate - A fast, microscopic helper crate for runtime string interpolation.

Overview

microtemplate

A fast, microscopic helper crate for runtime string interpolation.

Design Goals

  • Very lightweight: I want microtemplate to do exactly one thing. There's no reason to include more feature-rich/large libraries like regex/handlebars/tinytemplate if all you need is string interpolation.
    • Zero extra runtime sub-dependencies: The only dependencies used are for the derive macro, which is handled at compile time.
  • Fast: I'm interested in making this library as fast as I can make it. It's extremely fast right now, but I do not believe it is perfect.
  • Simple.

Quickstart

Add microtemplate to your dependencies:

[dependencies]
microtemplate = "1.0.2"

Usage example (from the tests):

use microtemplate::{Substitutions, render};

// This derive allows microtemplate to use the struct as substitutions.
#[derive(Substitutions)]
struct Movie<'a> {
    name: &'a str, // automatically replaces "{name}" in a template
    description: &'a str,
}

fn main() {
    let the_birds = Movie {
        name: "The Birds",
        description: "a swarm of birds that suddenly and violently attack the residents of a California coastal town",
    };

    // the template string here can be generated whenever- in this example it
    // is known at compile time but that does not matter.
    let rendered = render("{name} is a movie about {description}.", the_birds);

    // The Birds is a movie about a swarm of birds that suddenly and violently
    // attack the residents of a California coastal town.
    println!("{}", rendered);

    // note that if a substitution is indicated in the template string but it is
    // not found in the struct passed, it is replaced with an empty string ("")
}

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

If you have any bug reports, improvements, or feature requests, please make an issue

You might also like...
Rust library to detect bots using a user-agent string

Rust library to detect bots using a user-agent string

A flexible, simple to use, immutable, clone-efficient String replacement for Rust

A flexible, simple to use, immutable, clone-efficient String replacement for Rust. It unifies literals, inlined, and heap allocated strings into a single type.

A simple string parsing utility library for Rust, supporting no_std contexts.

strp Utility library for parsing data from an input string, or stdin if built with the std feature. Supports no_std contexts when built without the st

Membrane is an opinionated crate that generates a Dart package from a Rust library. Extremely fast performance with strict typing and zero copy returns over the FFI boundary via bincode.

Membrane is an opinionated crate that generates a Dart package from a Rust library. Extremely fast performance with strict typing and zero copy returns over the FFI boundary via bincode.

Online-statistics is crate 🦀 for Blazingly fast, generic and serializable online statistics

Online statistics in Rust 🦀 for Blazingly fast, generic and serializable online statistics. Quickstart Let's compute th

Runtime dependency injection in Rust

This library provides an easy to use dependency injection container with a focus on ergonomics and configurability at the cost of runtime performance. For a more performance-oriented container, look for a compile-time dependency injection library.

ImGUI runtime inspector

igri is a runtime inspector powered by imgui-rs

Rust Kubernetes runtime helpers. Based on kube-rs.
Rust Kubernetes runtime helpers. Based on kube-rs.

kubert Rust Kubernetes runtime helpers. Based on kube-rs. Features clap command-line interface support; A basic admin server with /ready and /live pro

A Rust runtime for AWS Lambda

Rust Runtime for AWS Lambda This package makes it easy to run AWS Lambda Functions written in Rust. This workspace includes multiple crates: lambda-ru

Comments
  • v2.0.0 To-Do list

    v2.0.0 To-Do list

    Breaking API changes to implement for version 2.0.0:

    • [ ] Missing substitutions should not be replaced instead of being replaced with the empty string. (suggested by u/bsdnoob)
    • [ ] Render should take a reference to a struct implementing Context (suggested by u/saecki)
    opened by Legend-of-iPhoenix 0
Owner
_iPhoenix_
Most comfortable in JS, Python, and C. <3 Rust. Interested in language design and static analysis.
_iPhoenix_
Simple and fast git helper functions

Simple and fast git helper functions

LongYinan 126 Dec 11, 2022
Helper macros: autoimpl, impl_scope

Impl-tools A set of helper macros Macros Autoimpl #[autoimpl] is a variant of #[derive], supporting: explicit generic parameter bounds ignored fields

null 38 Jan 1, 2023
A Self-Reference Helper For Rust.

Self-Reference A Self-Refernece Helper (Inspired From Selfie) this crate provides safe access to its self-reference. the main idea is not initializing

Jun Ryung Ju 6 Sep 7, 2022
A modular and blazing fast runtime security framework for the IoT, powered by eBPF.

Pulsar is a security tool for monitoring the activity of Linux devices at runtime, powered by eBPF. The Pulsar core modules use eBPF probes to collect

Exein.io 319 Jul 8, 2023
A memory efficient immutable string type that can store up to 24* bytes on the stack

compact_str A memory efficient immutable string type that can store up to 24* bytes on the stack. * 12 bytes for 32-bit architectures About A CompactS

Parker Timmerman 342 Jan 2, 2023
SubStrings, Slices and Random String Access in Rust

SubStrings, Slices and Random String Access in Rust This is a simple way to do it. Description Rust string processing is kind of hard, because text in

João Nuno Carvalho 2 Oct 24, 2021
A simple string interner / symbol table for Rust projects.

Symbol Interner A small Rust crate that provides a naïve string interner. Consult the documentation to learn about the types that are exposed. Install

Ryan Chandler 1 Nov 18, 2021
An efficient method of heaplessly converting numbers into their string representations, storing the representation within a reusable byte array.

NumToA #![no_std] Compatible with Zero Heap Allocations The standard library provides a convenient method of converting numbers into strings, but thes

Michael Murphy 42 Sep 6, 2022
A string truncator and scroller written in Rust

scissrs A string truncator and scroller written in Rust. Usage scissrs --help covers the definitions of this program's flags.

Skybbles 5 Aug 3, 2022
Count and convert between different indexing schemes on utf8 string slices

Str Indices Count and convert between different indexing schemes on utf8 string slices. The following schemes are currently supported: Chars (or "Unic

Nathan Vegdahl 11 Dec 25, 2022