【发布时间】:2016-10-22 21:20:50
【问题描述】:
在学习 Rust 并尝试做一些有用的事情时,我正在寻找一个 SAFE API call for DNS:Add service。 API 定义良好,按权利应该是一个简单的 PUT 请求,其主体是多个字符串和一个变量,仅限于两个选项。
我希望为 put 的主体定义一个结构和枚举及其实际限制,而不仅仅是使用字符串;正如我所期望的那样,定义接近现实是更好的做法。
我认为我必须很接近,但随后出现不匹配,试图将输入限制为枚举。第三个参数应该只是 'drive' 或 'app' as RootPathVariant。
所以,我希望将 root_path 与 arguments=arg[2] 匹配
但是匹配左侧的atm是&'static str,这是错误的,它想要String。
枚举定义:
pub enum RootPathVariant { App, Drive }
impl RootPathVariant {
pub fn as_str(&self) -> &str {
match self {
&RootPathVariant::App => "app",
&RootPathVariant::Drive => "drive",
}
}
}
我应该如何把这个匹配的左边,只接受那个枚举的内容?
let mut root_path: RootPathVariant = RootPathVariant::Drive;
match args[2].to_string() {
"drive" => { root_path = RootPathVariant::Drive },
"app" => { root_path = RootPathVariant::App },
_ => { println!( "Error: root_path not [drive | app]"); return }
};
let put_body = AddServiceBody {
long_Name: args[0],
service_Name: args[1],
root_Path: root_path,
service_Home_Dir_Path: args[3]
};
感谢您的帮助!
【问题讨论】:
-
您可以使用
string.as_ref()从String中获取&str,然后在比赛中使用它。但是args的类型是什么?如果您已经拥有&str,则可能不需要to_string()。 -
请添加确切的错误消息和minimal reproducible example。那么你更有可能得到任何答案:)
-
@Pavel Strakhov args 的类型从 Cargo:getopts 作为 Vec
很简单。我错过了 match args[2].as_str()的明显选项,它似乎有效! -
我支持@LukasKalbertodt 关于 MCVE 的观点。例如,这个问题 nothing 与枚举有关。我敢打赌your code looks like this。