just_template 0.1.0

a tool for code gen via templates
Documentation
  • Coverage
  • 22.22%
    2 out of 9 items documented0 out of 4 items with examples
  • Size
  • Source code size: 27.26 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 1.56 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 13s Average build duration of successful builds.
  • all releases: 13s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Repository
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • Weicao-CatilGrass

just_template

a tool for code gen via templates

Template File Writing Rules

just_template gens repetitive code using three core concepts: impl_mark, impl_area, and param.

  1. impl_mark Mark an "impl point" with a line starting with 10 > chars: >>>>>>>>>> NAME. Used for positioning. The system extracts the matching impl_area content and expands it here.

  2. impl_area Declare a reusable code template: @@@ NAME >>> [template content] @@@ <<< Inside, use param placeholders like <<<PARAM>>>. When adding an impl via cmd (e.g., insert_impl!), the system copies the area, replaces params, and appends to the impl_mark.

  3. param

    • Params outside an impl_area are replaced globally.
    • Params inside are replaced per-impl when generating.

Example:

Template:

// Auto generated
use std::collections::HashMap;

pub async fn my_func(
    name: &str,
    data: &[u8],
    params: &HashMap<String, String>,
) -> Option<Result<Vec<u32>, std::io::Error>> {
    match name {
>>>>>>>>>> arms
@@@ >>> arms
        "<<<crate_name>>>" => Some(<<<crate_name>>>::exec(data, params).await),
@@@ <<<
        _ => None,
    }
}

Run cmds:

insert_impl!("arms", crate_name = "my")
insert_impl!("arms", crate_name = "you")

The arms impl_area becomes:

        "my" => Some(my::exec(data, params).await),
        "you" => Some(you::exec(data, params).await),

Final expanded code:

// Auto generated
use std::collections::HashMap;

pub async fn my_func(
    name: &str,
    data: &[u8],
    params: &HashMap<String, String>,
) -> Option<Result<Vec<u32>, std::io::Error>> {
    match name {
        "my" => Some(my::exec(data, params).await),
        "you" => Some(you::exec(data, params).await),
        _ => None,
    }
}

License

This project is dual-licensed under MIT and Apache 2.0. See the LICENSE file for details.