1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
use std::sync::MutexGuard;
use std::sync::Mutex;
use toml::Value;
use serde::ser::Serialize;
/// ## toml_from_str used to convert string to toml data
/// ```ignore
///{
/// let cargo_toml = tsu::toml_from_str(r#"
/// [package]
/// name = "useful_macro"
/// version = "0.2.6"
///
/// [dependencies]
/// serde = "1.0"
///
/// [dev-dependencies]
/// serde_derive = "1.0"
/// serde_json = "1.0"
/// "#);
///
/// let package = cargo_toml.get("package").unwrap();
/// let name = package.get("name").unwrap();
/// println!("{:#?}", &package);
/// println!("{:#?}", &name);
///
/// let dependencies = cargo_toml.get("dependencies").unwrap();
/// println!("{:#?}", &dependencies);
///
/// let dev_dependencies = cargo_toml.get("dev-dependencies").unwrap();
/// println!("{:#?}", &dev_dependencies);
///}
/// ```
#[allow(warnings)]
pub fn toml_from_str(toml_str:impl ToString)-> MutexGuard<'static, Value> {
let toml_str_m = Box::leak(Box::new(Mutex::new(toml_str.to_string().parse::<Value>().unwrap())));
toml_str_m.lock().unwrap()
}
/// ## to_toml_str used to convert struct to toml string
/// ```ignore
///{
/// use serde_derive::Serialize;
/// #[derive(Serialize)]
/// struct Human {
/// name: String,
/// age: u8,
/// country: Country,
/// }
/// #[derive(Serialize)]
/// struct Country {
/// name: String,
/// }
/// let user = Human {
/// name: "mike".to_string(),
/// age: 18,
/// country: Country {
/// name: "country_name".to_string(),
/// },
/// };
/// let toml = tsu::to_toml_str(&user);
/// println!("{}",toml.as_str());
///}
/// ```
pub fn to_toml_str(toml_str:impl Serialize) -> MutexGuard<'static, String> {
let toml_str_m = Box::leak(Box::new(Mutex::new(toml::to_string(&toml_str).unwrap())));
toml_str_m.lock().unwrap()
}