やりたかったこと
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を無理やり引数に書きました、
もっといい方法があればコメントもらいたいです...