use std::fs::File;
use std::io::{Read, Write};
use std::path::Path;
use serde::{Deserialize, Serialize};
use toml;
use Result;
pub fn from_toml_file<T, P>(path: P) -> Result<T>
where T: for<'a> Deserialize<'a>,
P: AsRef<Path>
{
let f = track_try!(File::open(path));
track!(from_toml_reader(f))
}
pub fn from_toml_reader<T, R>(mut reader: R) -> Result<T>
where T: for<'a> Deserialize<'a>,
R: Read
{
let mut toml = String::new();
track_try!(reader.read_to_string(&mut toml));
track!(from_toml_str(&toml))
}
pub fn from_toml_str<T>(toml: &str) -> Result<T>
where T: for<'a> Deserialize<'a>
{
let this = track_try!(toml::from_str(toml));
Ok(this)
}
pub fn from_toml<T>(toml: toml::Value) -> Result<T>
where T: for<'a> Deserialize<'a>
{
let this = track_try!(toml.try_into());
Ok(this)
}
pub fn to_toml_file<T, P>(value: &T, path: P) -> Result<()>
where T: ?Sized + Serialize,
P: AsRef<Path>
{
let f = track_try!(File::create(path));
track!(to_toml_writer(value, f))
}
pub fn to_toml_writer<T, W>(value: &T, mut writer: W) -> Result<()>
where T: ?Sized + Serialize,
W: Write
{
let toml = track_try!(to_toml_string(value));
track_try!(writer.write_all(toml.as_bytes()));
Ok(())
}
pub fn to_toml_string<T>(value: &T) -> Result<String>
where T: ?Sized + Serialize
{
let toml = track_try!(toml::to_string(value));
Ok(toml)
}
pub fn to_toml<T>(value: &T) -> Result<toml::Value>
where T: ?Sized + Serialize
{
let toml = track_try!(toml::Value::try_from(value));
Ok(toml)
}