gpt4 book ai didi

enums - 如何在 structopt 中使用枚举?

转载 作者:行者123 更新时间:2023-11-29 08:01:25 25 4
gpt4 key购买 nike

我想制作 StructOpt使用枚举,这样每次用户通过 -d sunday它被解析为 Day::Sunday :

#[macro_use]
extern crate structopt;

use std::path::PathBuf;
use structopt::StructOpt;

// My enum
enum Day {
Sunday, Monday
}

#[derive(Debug, StructOpt)]
#[structopt(name = "example", about = "An example of StructOpt usage.")]
struct Opt {
/// Set speed
#[structopt(short = "s", long = "speed", default_value = "42")]
speed: f64,
/// Input file
#[structopt(parse(from_os_str))]
input: PathBuf,
/// Day of the week
#[structopt(short = "d", long = "day", default_value = Day::Monday)]
day: Day,
}

fn main() {
let opt = Opt::from_args();
println!("{:?}", opt);
}

我目前的最佳解决方案是使用Option<String>作为类型并传递自定义 parse_day() :

fn parse_day(day: &str) -> Result<Day, ParseError> {
match day {
"sunday" => Ok(Day::Sunday),
_ => Ok(Day::Monday)
}
Err("Could not parse a day")
}

最佳答案

Struct-opt 接受任何实现 FromStr 的类型,离你的 parse_day 函数不远:

use std::str::FromStr;

// any error type implementing Display is acceptable.
type ParseError = &'static str;

impl FromStr for Day {
type Err = ParseError;
fn from_str(day: &str) -> Result<Self, Self::Err> {
match day {
"sunday" => Ok(Day::Sunday),
"monday" => Ok(Day::Monday),
_ => Err("Could not parse a day"),
}
}
}

此外,default_value 应该是一个字符串,它将使用 from_str 解释为 Day

#[structopt(short = "d", long = "day", default_value = "monday")]
day: Day,

关于enums - 如何在 structopt 中使用枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54687403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com