0
Rustを学んで何か役に立つことを試みている間、私はSAFE API call for DNS:Add serviceを作りたいと思っています。 APIは明確に定義されており、その本体はいくつかの文字列であり、2つのオプションに制限された1つの変数である単純なPUT要求である必要があります。CLI引数をenumに制限する方法はありますか?
私は、文字列を使用するのではなく、実際の制限を持つput本体の構造体と列挙型を定義することを検討しました。私は、現実を近く定義することを望むので、より良い習慣です。
私は近くにいる必要がありますが、その後、入力を列挙型に制限しようとして不一致があると思います。 3番目の引数は 'drive'または 'app'のみでRootPathVariant
とする必要があります。
だから、私はarguments=arg[2]
の試合でroot_path
を割り当てるが、試合の左側を気圧まで探しています、それはString
を望んでいる場所間違っている、&'static str
です。
列挙型が定義されています:
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'のタイプは何ですか? 'to_string()'は既に '&str'を持っていれば不要です。 –
正確なエラーメッセージと[MCVE]を追加してください。あなたは答えを得る可能性がより高いです:) –
@Pavel Strakhov argsのタイプは、貨物から簡単に続く:getoptsをVecとして返します。動作するように見える 'args [2] .as_str()'に当てはまる明白なオプションがありませんでした! –