Ссылаясь на пример "Git" StructOpt , я не понимаю, как я тогда должен использовать данные из аргументов.
Я довольно новичок в Rust, поэтому яЯ предполагаю, что это очевидно.К сожалению, все примеры, которые я могу найти с перечислением, только делают println!
для объекта, поэтому я застрял.Я думал, что я сделаю match
, но он не работает.
Как бы вы узнали, какие команды были переданы пользователем для запуска вашей программы?
#[macro_use]
extern crate structopt;
use std::path::PathBuf;
use structopt::StructOpt;
#[derive(StructOpt, Debug)]
#[structopt(name = "git", about = "the stupid content tracker")]
enum Git {
#[structopt(name = "add")]
Add {
#[structopt(short = "i")]
interactive: bool,
#[structopt(short = "p")]
patch: bool,
#[structopt(parse(from_os_str))]
files: Vec<PathBuf>
},
#[structopt(name = "fetch")]
Fetch {
#[structopt(long = "dry-run")]
dry_run: bool,
#[structopt(long = "all")]
all: bool,
repository: Option<String>
},
#[structopt(name = "commit")]
Commit {
#[structopt(short = "m")]
message: Option<String>,
#[structopt(short = "a")]
all: bool
}
}
fn main() {
let opt = Git::from_args();
println!("{:?}", opt);
match opt() {
Git::Add(cmd) => println!("{:?}", cmd.interactive),
_ => (),
}
}
Компиляция:
05:42 $ cargo run -- add -i
Compiling example v0.1.0 (file:///Users/froyer/src/example)
error[E0532]: expected tuple struct/variant, found struct variant `Git::Add`
--> src/main.rs:41:9
|
41 | Git::Add(cmd) => println!("{:?}", cmd.interactive),
| ^^^^^^^^ did you mean `Git::Add { /* fields */ }`?
error[E0618]: expected function, found enum variant `opt`
--> src/main.rs:40:11
|
37 | let opt = Git::from_args();
| --- `opt` defined here
...
40 | match opt() {
| ^^^^^ not a function
help: `opt` is a unit variant, you need to write it without the parenthesis
|
40 | match opt {
| ^^^