A library for creating command line apps in rust inspired by the like of commander.js
NOTE: Check out sample code
For stable changes check the CHANGELOG.md file
For unstable changes check the CHANGELOG.md file
use fli::{Fli, init_fli_from_toml};
fn main(){
let mut app : Fli = init_fli_from_toml!(); // using the toml file
app.option("-n --name, <>", "Name to call you", |x : &Fli| {});
app.option("-g --greet", "greeting", |x : &Fli| {
match x.get_values("name".to_owned() /* passing (--name, -n or n) would work*/){
Ok(value) => {
println!("Good day {?}", value[0])
},
Err(_) => {},
}
});
// required for the app to work
app.run();
}then run it like this
$ cargo run -- -g -n james
Good day jamescargo add fliOR
[dependencies]
fli = "0.0.5"extern crate fli;
use fli::Fli;
fn main(){
println!("Happy Coding");
}fn main(){
let mut app = init_fli_from_toml!(); // to init from your cargo.toml file
}OR
fn main(){
let mut app = Fli::init("app-name", "an app description");
app.set_version("0.0.1");
}fn main(){
let mut app = init_fli_from_toml!();
app.option("-g --greet", "to make a greeting", greet);
app.option("-n --name, <>", "to set your name", |x|{});
}
// callback for the greet param
fn greet(x: &Fli){
match x.get_values("--name".to_owned()){
Ok(option) => {
println!("Good day {?}", v[0]);
},
Err(_) => {},
}
}fn main(){
//... other code
app.run();
}You can also add a new command set using the command method
fn main(){
let mut app = init_fli_from_toml!();
app.command("greet", "An app that respects")
.default(greet)
.allow_inital_no_param_values(false)
.option("-n --name, <>", "To print your name along side", greet)
.option("-t --time, []", "For time based Greeting", greet);
app.run();
}
fn greet(x){ /*code to greet "*/ }Then you would run the command like this
$ cargo run -- greet -n "codad5"
> Hello Codad5Like commander.js you can also do it in a procedual way
use fli::Fli;
fn main(){
// doing it procedual way
let mut app = init_fli_from_toml!();
let moveCommand = app.command("move", "move files");
// the [...] means accept optional multiple
moveCommand.option("-p --path, <...>", "path to files to be moved", move_file);
app.option("-g --greet", "to make a greeting", |x|{});
app.option("-n --name, <>", "to set your name", |x|{});
app.run();
if app.is_passed("--greet"){
if app.has_a_value("-n"){/* greet person with name*/}
else { /* freet without name*/ }
}
}Note:
All
app : Flimethods are avaliable asapp : &Flimethods
-
app.option(arg_and_data, callback): This method takes in 2 param- First
arg_and_data: This is a format template of how the avaliable arguments for a command would be being in a format-a --argor-a --arg, datawhere-ais the short form of the argument and--argis the long form of the argument.--datais the acceptable data type and it is seperated by a comma,, if not passed then the arg does not need a data type
symbol meaning [] This means it needs one optional data <> This means it needs one required data [...] This means it can take in many optional data <...> This means it needs at least one data, can take more - First
-
app.commad(command_name): This is to create a new command with its own option and param like -
app.default(callback): The default callback incase no args or command is being passed but ano_param_valueis being passed -
app.allow_duplicate_callback(bool): To prevent duplicate callbacks as a result of same callback of anargor as a result of theargbeen passed multiple times- True : Turns it on i.e the code below would work fine
$ myapp "some ran value" -
app.allow_inital_no_param_values(bool): This is to allow values to a command with no params -
app.run()(!important) : To run the app , -
app.has_a_value(arg_flag): Check if an arg has a value -
app.get_values(arg_flag): get the value(s) of an expect required param, this returns aResultType with a vector of string as the Ok valueVec<String>and&stras the error value
NOTE the method
get_valueswould return theErrEnum if the arg does not expect or require a value
app.is_passed(bool): Check if an arg flag is passed.
NOTE : using the methods
has_a_value,get_valuesandis_passedyou can pass-n , --name , n , nameand they would all return same expected value
app.get_arg_at(u8): Get Arg at a specific position
NOTE : The runner is not included as part of the arg list . ie if a command like this
my-app > greet > helloexist the position 1 for the commandgreetis greet and notmy-app
app.print_help(message): Prints a well descriptive message.
Printing default help thisGet the app general help option
$ my-app --help
Get the move command help option
$ my-app move --help # a new command called