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
8pub 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
18pub 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
24pub 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
29pub 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}