darkwing_derive

Derive Macro DarkwingArgs

source
#[derive(DarkwingArgs)]
{
    // Attributes available to this derive:
    #[darkwing_args]
}
Expand description

Derives the DarkwingArgs trait for a struct, enabling conversion of struct fields into command-line arguments.

This derive macro generates an implementation of the stringify method that converts struct fields into a vector of (argument_name, value) pairs.

§Attributes

  • #[darkwing_args(internal)]: Skip this field when generating arguments
  • #[darkwing_args(name = "custom-name")]: Use a custom name for the argument instead of the field name

§Examples

use darkwing_derive::DarkwingArgs;

#[derive(DarkwingArgs)]
struct BrowserArgs {
    #[darkwing_args(name = "user-data-dir")]
    data_dir: String,
    profile_name: String,
    #[darkwing_args(internal)]
    internal_field: String,
}

let args = BrowserArgs {
    data_dir: "/path/to/data".to_string(),
    profile_name: "default".to_string(),
    internal_field: "hidden".to_string(),
};

// Will produce:
// vec![
//     ("--user-data-dir".to_string(), "/path/to/data".to_string()),
//     ("--profile_name".to_string(), "default".to_string())
// ]
// Note: internal_field is skipped
let stringified = args.stringify();

Empty strings are automatically skipped:

use darkwing_derive::DarkwingArgs;

#[derive(DarkwingArgs)]
struct BrowserArgs {
    #[darkwing_args(name = "user-data-dir")]
    data_dir: String,
    profile_name: String,
    #[darkwing_args(internal)]
    internal_field: String,
}
let args = BrowserArgs {
    data_dir: "/path/to/data".to_string(),
    profile_name: "".to_string(), // This will be skipped
    internal_field: "hidden".to_string(),
};

// Will produce:
// vec![
//     ("--user-data-dir".to_string(), "/path/to/data".to_string())
// ]
let stringified = args.stringify();