2017-10-18 1 views
2

私は、環境変数をマッチングの結果と変更可能な変数を移入します:envyを使用すると、一致する結果を持つ構造体インスタンスをどのように埋め込むのですか?

struct Environment { 
    some_env_variable_1: String, 
    some_env_variable_2: String, 
    some_env_variable_3: String, 
    some_env_variable_4: String, 
} 

match envy::from_env::<Environment>() { 
    Ok(environment) => println!("{:#?}", environment), 
    Err(error) => panic!("{:#?})", error), 
}; 

//where I'm stuck 
let mut e = Environment { 
    some_env_variable_1: // want this to be from match 
}; 

答えて

4

あなたはあなたのためのすべての解析と人口を行い羨望メソッドを呼び出しています。問題は、あなたが結果を捨てるということである - それはmatch内部でのみ利用可能です:

match envy::from_env::<Environment>() { 
    Ok(environment) => println!("{:#?}", environment), // gone now 
    Err(error) => panic!("{:#?})", error), 
}; 

あなたはそれを捨てないようにする必要があります。

let environment = match envy::from_env::<Environment>() { 
    Ok(environment) => { 
     println!("{:#?}", environment); 
     environment // Now the entire `match` evaluates to `environment` 
    } 
    Err(error) => panic!("{:#?})", error), 
}; 

あるいは、より慣用的に、ちょうどexpectを使用します:

let environment: Environment = envy::from_env() 
    .expect("Couldn't parse environment"); 

println!("{:#?}", environment); 

コンプリート例:

extern crate serde; 
#[macro_use] 
extern crate serde_derive; 
extern crate envy; 

#[derive(Debug, Deserialize)] 
struct Environment { 
    username: String, 
    port: u16, 
} 

fn main() { 
    let mut environment: Environment = envy::from_env() 
     .expect("Couldn't parse environment variables"); 

    println!("{:#?}", environment); 
} 
$ USERNAME=overflow PORT=8787 cargo run 

Environment { 
    username: "overflow", 
    port: 8787 
} 
+1

は、それが行の最後にそれを捨てたことを認識していなかった、ありがとうございました。私はそれほど慣れないものを試しましたが、まだそれを捨ててしまったので私は推測します。 – Joe

+1

@Joe明確にするために、廃棄の違いをもたらすのは '{}'ではないので、 'match'の前に' let environment = 'です。 'Ok(environment)=> environment 'もうまくいきました。 (それはあなたが "ブロックする"ことを意味していたと仮定します) – trentcl

+0

@trentclわかりました。はい、私は中括弧に気づき、ちょうど最後の文で錆の戻り値が暗黙的であることを認識したので、 '' '' Ok(environment)=> '' 'の後に' ''環境 ''を持っています。ありがとうございました! – Joe

関連する問題