#complete #turn #file

bin+lib genify

Turn one file into a complete project

2 releases

new 0.0.2 Jan 2, 2025
0.0.1 Dec 1, 2024

#11 in #turn

Download history 113/week @ 2024-11-30 15/week @ 2024-12-07 10/week @ 2024-12-14 71/week @ 2024-12-28

100 downloads per month

MIT license

25KB
593 lines

genify

Crates.io Docs.rs CI Coverage Status

Turn one file into a complete project.

Installation

Cargo

  • Install the rust toolchain in order to have cargo installed by following this guide.
  • run
    cargo install genify --features clap
    

Get Started

CLI

Turn one file into a complete project

Usage: genify [OPTIONS] <PATH>

Arguments:
  <PATH>

Options:
  -n, --no-interaction  Do not ask any interactive question
  -h, --help            Print help
  -V, --version         Print version

example.toml

[props]
value = "value"
dir = "tmp"
val = "val"
other = "{{ val }}"
override = "1"

[[rules]]
type = "file"
path = "{{ dir }}/some.txt"  # if the file exists will be error
content = "{{ val }} {{ value }} {{ other | pascal_case }} {{ override }} - should be replaced"

[[rules]]
type = "replace"
path = "{{ dir }}/some.txt"
replace = "should.*replaced"
content = "replaced {{ value }}"

[[rules]]
type = "prepend"
path = "{{ dir }}/some.txt"
content = "prepend {{ value }}"

[[rules]]
type = "append"
path = "{{ dir }}/some.txt"
content = "append {{ value }}"
genify example.toml

tmp/some.txt

prepend value
val value Val 1 - replaced value
append value

Code

fn main() {
    genify::generate(
        Path::new("."),
        &genify::parse_toml(
            fs::read_to_string("xtask/templates/controller.toml")
                .unwrap()
                .as_str(),
        )
        .expect("Cannot parse the controller.toml"),
        Some(vec![(
            "name".to_string(),
            genify::Value::String(name.clone()),
        )]),
    )
    .expect("Cannot generate the controller");
}

License

Contribution

CONTRIBUTING.md

Dependencies

~8–17MB
~229K SLoC