cmdexpand

Crates.iocmdexpand
lib.rscmdexpand
version0.3.2
sourcesrc
created_at2023-09-23 17:12:05.388322
updated_at2023-09-24 17:30:00.629517
descriptionThis crate performs batch-like expansions
homepage
repositoryhttps://github.com/ndtoan96/cmdexpand
max_upload_size
id981363
size22,720
Nguyễn Đức Toàn (ndtoan96)

documentation

README

rust workflow

Introduction

This library performs batch-like expansions in strings, that is, to expand %VAR% into their values inside some context. It's like a Windows version of shellexpand.

Aside from context variables, it can also expands number arguments (e.g %1, %*) syntax with a list of arguments provided by user.

Unlike shellexpand, variables that do not exist will expand to empty string.

Usage

See example below on how to define a context. The library also provids a default cmdexpand::env_context which can expand environment variable.

use cmdexpand::Expander;

fn mycontext(s: &str) -> Option<String> {
   match s {
       "NAME" => Some(String::from("Alice")),
       "HOBBY" => Some(String::from("coding")),
       _ => None,
   }
}

assert_eq!(Expander::new(r#"echo "%NAME%'s hobby is %HOBBY%""#)
              .add_context(&mycontext)
              .expand()
              .unwrap(),
           r#"echo "Alice's hobby is coding""#);

You can provide a list of arguments too.

use cmdexpand::Expander;

assert_eq!(Expander::new("del %*")
            .add_args(&["a.txt", "b.txt"])
            .expand()
            .unwrap(), "del a.txt b.txt");
Commit count: 25

cargo fmt