pub struct Flag {
pub name: String,
pub description: Option<String>,
pub flag_type: FlagType,
pub alias: Option<Vec<String>>,
}
Expand description
Flag
type.
Option flag struct
Fields§
§name: String
Flag name
description: Option<String>
Flag description
flag_type: FlagType
Flag type
alias: Option<Vec<String>>
Flag alias
Implementations§
source§impl Flag
impl Flag
sourcepub fn new<T: Into<String>>(name: T, flag_type: FlagType) -> Self
pub fn new<T: Into<String>>(name: T, flag_type: FlagType) -> Self
Create new instance of Flag
Example
use seahorse::{Flag, FlagType};
let bool_flag = Flag::new("bool", FlagType::Bool);
let float_flag = Flag::new("float", FlagType::Float);
Examples found in repository?
examples/single_app.rs (line 15)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
fn main() {
let args: Vec<String> = env::args().collect();
let name = "single_app";
let app = App::new(name)
.author(env!("CARGO_PKG_AUTHORS"))
.description(env!("CARGO_PKG_DESCRIPTION"))
.usage("single_app [args]")
.version(env!("CARGO_PKG_VERSION"))
.action(action)
.flag(
Flag::new("bye", FlagType::Bool)
.description("single_app args --bye(-b)")
.alias("b"),
);
app.run(args);
}
More examples
examples/multiple_app.rs (line 13)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
fn main() {
let args: Vec<String> = env::args().collect();
let app = App::new("multiple_app")
.author(env!("CARGO_PKG_AUTHORS"))
.description(env!("CARGO_PKG_DESCRIPTION"))
.usage("multiple_app [command] [arg]")
.version(env!("CARGO_PKG_VERSION"))
.action(|c: &Context| println!("{:?} : {}", c.args, c.bool_flag("bool")))
.flag(
Flag::new("bool", FlagType::Bool)
.description("bool flag")
.alias("b"),
)
.command(add_command())
.command(hello_command());
app.run(args);
}
fn hello_action(c: &Context) {
if c.bool_flag("bye") {
println!("Bye, {:?}", c.args);
} else {
println!("Hello, {:?}", c.args);
}
match c.int_flag("age") {
Ok(age) => println!("{:?} is {} years old", c.args, age),
Err(e) => match e {
FlagError::TypeError => println!("age flag type error"),
FlagError::ValueTypeError => println!("value type error"),
FlagError::Undefined => println!("undefined age flag"),
FlagError::ArgumentError => println!("age flag argument error"),
FlagError::NotFound => println!("not found age flag"),
},
}
match c.string_flag("neko") {
Ok(neko) => println!("neko say {}", neko),
Err(e) => match e {
FlagError::TypeError => println!("neko flag type error"),
FlagError::ValueTypeError => println!("value type error"),
FlagError::Undefined => println!("undefined neko flag"),
FlagError::ArgumentError => println!("neko flag argument error"),
FlagError::NotFound => println!("not found neko flag"),
},
}
}
fn hello_command() -> Command {
Command::new("hello")
.description("hello command")
.usage("multiple_app hello(he, h) [name]")
.alias("h")
.alias("he")
.action(hello_action)
.flag(
Flag::new("bye", FlagType::Bool)
.description("bye flag")
.alias("b"),
)
.flag(
Flag::new("age", FlagType::Int)
.description("age flag")
.alias("a")
.alias("ag"),
)
}
examples/nested_multiple_app.rs (line 13)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
fn main() {
let args: Vec<String> = env::args().collect();
let app = App::new("multiple_app")
.author(env!("CARGO_PKG_AUTHORS"))
.description(env!("CARGO_PKG_DESCRIPTION"))
.usage("multiple_app [command] [arg]")
.version(env!("CARGO_PKG_VERSION"))
.action(|c: &Context| println!("{:?} : {}", c.args, c.bool_flag("bool")))
.flag(
Flag::new("bool", FlagType::Bool)
.description("bool flag")
.alias("b"),
)
.command(add_command())
.command(hello_command());
app.run(args);
}
fn hello_action(c: &Context) {
if c.bool_flag("bye") {
println!("Bye, {:?}", c.args);
} else {
println!("Hello, {:?}", c.args);
}
match c.int_flag("age") {
Ok(age) => println!("{:?} is {} years old", c.args, age),
Err(e) => match e {
FlagError::TypeError => println!("age flag type error"),
FlagError::ValueTypeError => println!("value type error"),
FlagError::Undefined => println!("undefined age flag"),
FlagError::ArgumentError => println!("age flag argument error"),
FlagError::NotFound => println!("not found age flag"),
},
}
match c.string_flag("neko") {
Ok(neko) => println!("neko say {}", neko),
Err(e) => match e {
FlagError::TypeError => println!("neko flag type error"),
FlagError::ValueTypeError => println!("value type error"),
FlagError::Undefined => println!("undefined neko flag"),
FlagError::ArgumentError => println!("neko flag argument error"),
FlagError::NotFound => println!("not found neko flag"),
},
}
}
fn hello_command() -> Command {
Command::new("hello")
.description("hello command")
.usage("multiple_app hello(he, h) [name]")
.alias("h")
.alias("he")
.action(hello_action)
.flag(
Flag::new("bye", FlagType::Bool)
.description("bye flag")
.alias("b"),
)
.flag(
Flag::new("age", FlagType::Int)
.description("age flag")
.alias("a")
.alias("ag"),
)
.command(world_command())
}
examples/top_level_error_handling.rs (line 21)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
fn main() {
let args: Vec<String> = env::args().collect();
let app = App::new("cli")
.author(env!("CARGO_PKG_AUTHORS"))
.description(env!("CARGO_PKG_DESCRIPTION"))
.usage("multiple_app [command] [arg]")
.version(env!("CARGO_PKG_VERSION"))
.action_with_result(|c: &Context| {
if c.bool_flag("error") {
Err(ActionError {
message: "ERROR...".to_string(),
})
} else {
Ok(())
}
})
.flag(
Flag::new("error", FlagType::Bool)
.description("error flag")
.alias("e"),
);
match app.run_with_result(args) {
Ok(_) => println!("OK"),
Err(e) => match e {
ActionError { message } => println!("{}", message),
},
};
}
sourcepub fn description<T: Into<String>>(self, description: T) -> Self
pub fn description<T: Into<String>>(self, description: T) -> Self
Set description of the flag
Example
use seahorse::{Flag, FlagType};
let bool_flag = Flag::new("bool", FlagType::Bool)
.description("cli cmd Hello --bool");
Examples found in repository?
examples/single_app.rs (line 16)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
fn main() {
let args: Vec<String> = env::args().collect();
let name = "single_app";
let app = App::new(name)
.author(env!("CARGO_PKG_AUTHORS"))
.description(env!("CARGO_PKG_DESCRIPTION"))
.usage("single_app [args]")
.version(env!("CARGO_PKG_VERSION"))
.action(action)
.flag(
Flag::new("bye", FlagType::Bool)
.description("single_app args --bye(-b)")
.alias("b"),
);
app.run(args);
}
More examples
examples/multiple_app.rs (line 14)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
fn main() {
let args: Vec<String> = env::args().collect();
let app = App::new("multiple_app")
.author(env!("CARGO_PKG_AUTHORS"))
.description(env!("CARGO_PKG_DESCRIPTION"))
.usage("multiple_app [command] [arg]")
.version(env!("CARGO_PKG_VERSION"))
.action(|c: &Context| println!("{:?} : {}", c.args, c.bool_flag("bool")))
.flag(
Flag::new("bool", FlagType::Bool)
.description("bool flag")
.alias("b"),
)
.command(add_command())
.command(hello_command());
app.run(args);
}
fn hello_action(c: &Context) {
if c.bool_flag("bye") {
println!("Bye, {:?}", c.args);
} else {
println!("Hello, {:?}", c.args);
}
match c.int_flag("age") {
Ok(age) => println!("{:?} is {} years old", c.args, age),
Err(e) => match e {
FlagError::TypeError => println!("age flag type error"),
FlagError::ValueTypeError => println!("value type error"),
FlagError::Undefined => println!("undefined age flag"),
FlagError::ArgumentError => println!("age flag argument error"),
FlagError::NotFound => println!("not found age flag"),
},
}
match c.string_flag("neko") {
Ok(neko) => println!("neko say {}", neko),
Err(e) => match e {
FlagError::TypeError => println!("neko flag type error"),
FlagError::ValueTypeError => println!("value type error"),
FlagError::Undefined => println!("undefined neko flag"),
FlagError::ArgumentError => println!("neko flag argument error"),
FlagError::NotFound => println!("not found neko flag"),
},
}
}
fn hello_command() -> Command {
Command::new("hello")
.description("hello command")
.usage("multiple_app hello(he, h) [name]")
.alias("h")
.alias("he")
.action(hello_action)
.flag(
Flag::new("bye", FlagType::Bool)
.description("bye flag")
.alias("b"),
)
.flag(
Flag::new("age", FlagType::Int)
.description("age flag")
.alias("a")
.alias("ag"),
)
}
examples/nested_multiple_app.rs (line 14)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
fn main() {
let args: Vec<String> = env::args().collect();
let app = App::new("multiple_app")
.author(env!("CARGO_PKG_AUTHORS"))
.description(env!("CARGO_PKG_DESCRIPTION"))
.usage("multiple_app [command] [arg]")
.version(env!("CARGO_PKG_VERSION"))
.action(|c: &Context| println!("{:?} : {}", c.args, c.bool_flag("bool")))
.flag(
Flag::new("bool", FlagType::Bool)
.description("bool flag")
.alias("b"),
)
.command(add_command())
.command(hello_command());
app.run(args);
}
fn hello_action(c: &Context) {
if c.bool_flag("bye") {
println!("Bye, {:?}", c.args);
} else {
println!("Hello, {:?}", c.args);
}
match c.int_flag("age") {
Ok(age) => println!("{:?} is {} years old", c.args, age),
Err(e) => match e {
FlagError::TypeError => println!("age flag type error"),
FlagError::ValueTypeError => println!("value type error"),
FlagError::Undefined => println!("undefined age flag"),
FlagError::ArgumentError => println!("age flag argument error"),
FlagError::NotFound => println!("not found age flag"),
},
}
match c.string_flag("neko") {
Ok(neko) => println!("neko say {}", neko),
Err(e) => match e {
FlagError::TypeError => println!("neko flag type error"),
FlagError::ValueTypeError => println!("value type error"),
FlagError::Undefined => println!("undefined neko flag"),
FlagError::ArgumentError => println!("neko flag argument error"),
FlagError::NotFound => println!("not found neko flag"),
},
}
}
fn hello_command() -> Command {
Command::new("hello")
.description("hello command")
.usage("multiple_app hello(he, h) [name]")
.alias("h")
.alias("he")
.action(hello_action)
.flag(
Flag::new("bye", FlagType::Bool)
.description("bye flag")
.alias("b"),
)
.flag(
Flag::new("age", FlagType::Int)
.description("age flag")
.alias("a")
.alias("ag"),
)
.command(world_command())
}
examples/top_level_error_handling.rs (line 22)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
fn main() {
let args: Vec<String> = env::args().collect();
let app = App::new("cli")
.author(env!("CARGO_PKG_AUTHORS"))
.description(env!("CARGO_PKG_DESCRIPTION"))
.usage("multiple_app [command] [arg]")
.version(env!("CARGO_PKG_VERSION"))
.action_with_result(|c: &Context| {
if c.bool_flag("error") {
Err(ActionError {
message: "ERROR...".to_string(),
})
} else {
Ok(())
}
})
.flag(
Flag::new("error", FlagType::Bool)
.description("error flag")
.alias("e"),
);
match app.run_with_result(args) {
Ok(_) => println!("OK"),
Err(e) => match e {
ActionError { message } => println!("{}", message),
},
};
}
sourcepub fn alias<T: Into<String>>(self, name: T) -> Self
pub fn alias<T: Into<String>>(self, name: T) -> Self
Set alias of the flag
Example
use seahorse::{Flag, FlagType};
let bool_flag = Flag::new("bool", FlagType::Bool)
.alias("b");
let string_flag = Flag::new("string", FlagType::String)
.alias("s")
.alias("str");
Examples found in repository?
examples/single_app.rs (line 17)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
fn main() {
let args: Vec<String> = env::args().collect();
let name = "single_app";
let app = App::new(name)
.author(env!("CARGO_PKG_AUTHORS"))
.description(env!("CARGO_PKG_DESCRIPTION"))
.usage("single_app [args]")
.version(env!("CARGO_PKG_VERSION"))
.action(action)
.flag(
Flag::new("bye", FlagType::Bool)
.description("single_app args --bye(-b)")
.alias("b"),
);
app.run(args);
}
More examples
examples/multiple_app.rs (line 15)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
fn main() {
let args: Vec<String> = env::args().collect();
let app = App::new("multiple_app")
.author(env!("CARGO_PKG_AUTHORS"))
.description(env!("CARGO_PKG_DESCRIPTION"))
.usage("multiple_app [command] [arg]")
.version(env!("CARGO_PKG_VERSION"))
.action(|c: &Context| println!("{:?} : {}", c.args, c.bool_flag("bool")))
.flag(
Flag::new("bool", FlagType::Bool)
.description("bool flag")
.alias("b"),
)
.command(add_command())
.command(hello_command());
app.run(args);
}
fn hello_action(c: &Context) {
if c.bool_flag("bye") {
println!("Bye, {:?}", c.args);
} else {
println!("Hello, {:?}", c.args);
}
match c.int_flag("age") {
Ok(age) => println!("{:?} is {} years old", c.args, age),
Err(e) => match e {
FlagError::TypeError => println!("age flag type error"),
FlagError::ValueTypeError => println!("value type error"),
FlagError::Undefined => println!("undefined age flag"),
FlagError::ArgumentError => println!("age flag argument error"),
FlagError::NotFound => println!("not found age flag"),
},
}
match c.string_flag("neko") {
Ok(neko) => println!("neko say {}", neko),
Err(e) => match e {
FlagError::TypeError => println!("neko flag type error"),
FlagError::ValueTypeError => println!("value type error"),
FlagError::Undefined => println!("undefined neko flag"),
FlagError::ArgumentError => println!("neko flag argument error"),
FlagError::NotFound => println!("not found neko flag"),
},
}
}
fn hello_command() -> Command {
Command::new("hello")
.description("hello command")
.usage("multiple_app hello(he, h) [name]")
.alias("h")
.alias("he")
.action(hello_action)
.flag(
Flag::new("bye", FlagType::Bool)
.description("bye flag")
.alias("b"),
)
.flag(
Flag::new("age", FlagType::Int)
.description("age flag")
.alias("a")
.alias("ag"),
)
}
examples/nested_multiple_app.rs (line 15)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
fn main() {
let args: Vec<String> = env::args().collect();
let app = App::new("multiple_app")
.author(env!("CARGO_PKG_AUTHORS"))
.description(env!("CARGO_PKG_DESCRIPTION"))
.usage("multiple_app [command] [arg]")
.version(env!("CARGO_PKG_VERSION"))
.action(|c: &Context| println!("{:?} : {}", c.args, c.bool_flag("bool")))
.flag(
Flag::new("bool", FlagType::Bool)
.description("bool flag")
.alias("b"),
)
.command(add_command())
.command(hello_command());
app.run(args);
}
fn hello_action(c: &Context) {
if c.bool_flag("bye") {
println!("Bye, {:?}", c.args);
} else {
println!("Hello, {:?}", c.args);
}
match c.int_flag("age") {
Ok(age) => println!("{:?} is {} years old", c.args, age),
Err(e) => match e {
FlagError::TypeError => println!("age flag type error"),
FlagError::ValueTypeError => println!("value type error"),
FlagError::Undefined => println!("undefined age flag"),
FlagError::ArgumentError => println!("age flag argument error"),
FlagError::NotFound => println!("not found age flag"),
},
}
match c.string_flag("neko") {
Ok(neko) => println!("neko say {}", neko),
Err(e) => match e {
FlagError::TypeError => println!("neko flag type error"),
FlagError::ValueTypeError => println!("value type error"),
FlagError::Undefined => println!("undefined neko flag"),
FlagError::ArgumentError => println!("neko flag argument error"),
FlagError::NotFound => println!("not found neko flag"),
},
}
}
fn hello_command() -> Command {
Command::new("hello")
.description("hello command")
.usage("multiple_app hello(he, h) [name]")
.alias("h")
.alias("he")
.action(hello_action)
.flag(
Flag::new("bye", FlagType::Bool)
.description("bye flag")
.alias("b"),
)
.flag(
Flag::new("age", FlagType::Int)
.description("age flag")
.alias("a")
.alias("ag"),
)
.command(world_command())
}
examples/top_level_error_handling.rs (line 23)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
fn main() {
let args: Vec<String> = env::args().collect();
let app = App::new("cli")
.author(env!("CARGO_PKG_AUTHORS"))
.description(env!("CARGO_PKG_DESCRIPTION"))
.usage("multiple_app [command] [arg]")
.version(env!("CARGO_PKG_VERSION"))
.action_with_result(|c: &Context| {
if c.bool_flag("error") {
Err(ActionError {
message: "ERROR...".to_string(),
})
} else {
Ok(())
}
})
.flag(
Flag::new("error", FlagType::Bool)
.description("error flag")
.alias("e"),
);
match app.run_with_result(args) {
Ok(_) => println!("OK"),
Err(e) => match e {
ActionError { message } => println!("{}", message),
},
};
}
sourcepub fn option_index(&self, v: &[String]) -> Option<usize>
pub fn option_index(&self, v: &[String]) -> Option<usize>
Get flag position from command line argument
Trait Implementations§
Auto Trait Implementations§
impl RefUnwindSafe for Flag
impl Send for Flag
impl Sync for Flag
impl Unpin for Flag
impl UnwindSafe for Flag
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more