dml_tools/
util.rs

1use serde::{Deserialize, Serialize};
2use std::error::Error;
3use std::path::Path;
4use yaml_merge_keys::*;
5use std::fs::{self,File};
6use std::io::prelude::*;
7
8/// Deserialize YAML object from String
9pub fn read_yaml_from_string<T:for<'de> Deserialize<'de> >(str: &str) -> Result<T, Box<dyn Error>> {
10    use yaml_merge_keys::serde_yaml::Value;
11    let sy:Value = serde_yaml::from_str(str)?;
12    let v: Result<Value, serde_yaml::Error> = serde_yaml::to_value(sy);
13    
14    let fix: Result<Value, MergeKeyError> = merge_keys_serde(v?);
15    Ok(serde_yaml::from_value(fix?)?)
16}
17
18/// Read file into String and deserialize YAML object
19pub fn read_yaml_from_file<T:for<'de> Deserialize<'de>, P: AsRef<Path>>(path: P) -> Result<T, Box<dyn Error>> {
20    let sfile:String = fs::read_to_string(path)?.parse()?;
21    read_yaml_from_string(&sfile)
22}
23
24/// Read file into a String
25pub fn read_file_into_string(file:&str) -> String {
26    fs::read_to_string(file).expect(format!("To read '{file}' into string").as_str())
27}
28
29/// Serialize YAML object and write it to a file
30pub fn write_yaml_to_file<I:for<'de> Serialize>(file_name:&str, doc:&I)  -> Result<(), Box<dyn Error>> {
31    let serialized = serde_yaml::to_string(&doc)?;
32    let mut fh = File::create(file_name)?;
33    fh.write_all(&serialized.as_bytes())?;
34    Ok(())
35}