struct - 使用 envy 时如何用匹配结果填充结构体实例?

标签 struct rust match

我想用匹配环境变量的结果填充可变变量:

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
};

最佳答案

您正在调用 envy 方法,该方法会为您完成所有解析和填充。问题是您丢弃结果 - 它仅在匹配中可用:

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
}

关于struct - 使用 envy 时如何用匹配结果填充结构体实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46816614/

相关文章:

azure - Rust:从 Azure 事件中心接收 AMQP 消息

c++ - Rust 不接收来自 C++ 的 UDP 消息

r - 根据第一列中的值将函数应用于数据框中除第一列之外的所有行和列

sql - 如何在 hive 中创建一个空的结构数组?

c - 将类型定义的二维结构数组作为函数参数传递

C: 变量有初始值设定项但类型不完整

vector - 迭代过程中如何转移所有权?

symfony2特殊路线通配符没有别的

mysql - 如何在Mysql二进制中制作 "In"运算符?

c - 传递给线程(unix)的结构有错误的值