RustでtomlファイルをstructにDeserialzeする


やりたかったこと

tomlファイルの内容を、structに追加したかった

Cargo.toml

[dependencies]
toml = "0.5.6"
serde_derive = "1.0.113"

読み込むtoml

# ./config/local.toml
[mongo_db]
name = "hoge"
age = 120

実装

※コメントで頂いたコードのほうがいいので、そちらの方を参照してください!!

#[derive(Debug, Deserialize)]
pub struct Config {
    pub mongo_db: MongoDb,
}

// 適当なsturctなのでごめんなさい
#[derive(Debug, Deserialize)]
pub struct MongoDb {
    pub name: String,
    pub age: i32,
}

fn main() {
    let config = toml::deserial_toml_file::<Config>("./config/local.toml", &mut String::from(""))?;
    println!("config is {:?}", config);
}

// deserial_toml_file tomlのfileをstructにdeserializeする
pub fn deserial_toml_file<'a, T>(path: &'a str, file_str: &'a mut String) -> Result<T>
where
    T: Deserialize<'a>,
{
    *file_str = file::read_file(path)?;

    let obj = toml::from_str::<T>(file_str)?;

    Ok(obj)
}

感想

ジェネリクスで実装したらlifetimeのerrorが発生したため、

file_strを無理やり引数に書きました、

もっといい方法があればコメントもらいたいです...