Rustの疑問符演算子を使いたいが期待するErrorの型が()の場合

?演算子は返り値がResultの時、unwrapを行い、期待するErrorに変換してくれるが、期待するErrorが()などどうしてもFromで実装できないエラーの場合(できたら誰か教えて)は、一旦クロージャの中で展開してからそれをmap_errを経由させることで?を使うことができた。あまりこんなケースなさそうだが。

use std::env;

#[derive(Debug)]
enum Error {
    Example(env::VarError),
}

impl From<env::VarError> for Error {
    fn from(e: env::VarError) -> Self {
        Error::Example(e)
    }
}

fn example() -> Result<Vec<String>, ()> {
    (|| -> Result<_, Error> {
        let a = env::var("HOME")?;
        let b = env::var("USER")?;
        let c = env::var("HOGE")?;
        Ok(vec![a, b, c])
    })()
    .map_err(|_| ())
}

fn main() {
    dbg!(example());
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA