genify

Crates.iogenify
lib.rsgenify
version0.0.3
created_at2024-12-01 18:45:46.145291+00
updated_at2025-06-04 20:38:34.186395+00
descriptionTurn one file into a complete project
homepage
repositoryhttps://github.com/daxartio/genify
max_upload_size
id1467735
size95,981
Danil Akhtarov (daxartio)

documentation

README

genify

Crates.io Docs.rs CI Coverage Status

Turn one file into a complete project

The main idea is to have a single source file that can be used to generate or update a full project structure quickly and consistently using different configuration files.

There are two modes:

  • CLI interactive mode – for manual use and quick input.
  • Code mode – for automated and configurable project generation.

Features:

  • Create files from templates based on config.
  • Replace content using regular expressions.
  • Append or prepend content to existing files.
  • Easily update multiple projects using shared configs.

Installation

Cargo

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

Get Started

CLI

Turn one file into a complete project

Usage: genify [OPTIONS] <PATH>

Arguments:
  <PATH>  Path to a config file or http(s) URL

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

Supported Variable Types

Type Description CLI Interactive Support
String Text value ✅ Supported
Integer Whole number ✅ Supported
Float Decimal number ✅ Supported
Boolean true or false ✅ Supported
Array List of values ❌ Not supported
Map Key-value pairs ❌ Not supported

Note: In interactive CLI mode, all types are supported except Array and Map, will be used default values.

Code

fn main() {
    genify::generate(
        Path::new("."),
        &genify::parse_toml(
            fs::read_to_string("example.toml")
                .unwrap()
                .as_str(),
        )
        .expect("Cannot parse the example.toml"),
        Some(vec![(
            "value".to_string(),
            genify::Value::String("val".to_string()),
        )]),
    )
    .expect("Cannot generate the example");
}

License

Contribution

CONTRIBUTING.md

Commit count: 26

cargo fmt