1 //! obj/src/lib.rs --- Objective type library 2 #![feature(associated_type_bounds)] 4 pub use err::{Error, Result}; 11 use ron::extensions::Extensions; 12 use serde::{de::DeserializeOwned, Deserialize, Serialize}; 14 use std::collections::{HashMap, BTreeMap}; 16 /// common trait for all config modules. This trait provides functions 17 /// for de/serializing to/from RON, updating fields, and formatting. 18 pub trait Configure: Objective { 19 fn update(&self) -> Result<()> { 25 /// Define Object behaviors, implemented by Objects 27 fn encode(&self) -> Result<Vec<u8>> 31 Ok(bincode::serialize(self)?) 34 fn encode_into<W>(&self, writer: W) -> Result<()> 39 Ok(bincode::serialize_into(writer, self)?) 42 fn decode<'a>(&self, bytes: &'a [u8]) -> Result<Self> 44 Self: Deserialize<'a>, 46 Ok(bincode::deserialize(bytes)?) 49 fn decode_from<R>(&self, rdr: R) -> Result<Self> 52 Self: DeserializeOwned, 54 Ok(bincode::deserialize_from(rdr)?) 57 fn to_ron_writer<W>(&self, writer: W) -> Result<()> 62 Ok(ron::ser::to_writer_pretty( 65 ron::ser::PrettyConfig::new() 66 .indentor(" ".to_owned()) 67 .extensions(Extensions::all()), 71 fn to_ron_string(&self) -> Result<String> 75 Ok(ron::ser::to_string_pretty( 77 ron::ser::PrettyConfig::new().indentor(" ".to_owned()), 81 fn from_ron_reader<R>(&self, mut rdr: R) -> Result<Self> 84 Self: DeserializeOwned, 86 let mut bytes = Vec::new(); 87 rdr.read_to_end(&mut bytes)?; 88 Ok(ron::de::from_bytes(&bytes)?) 91 fn from_ron_str<'a>(s: &'a str) -> Result<Self> 93 Self: Deserialize<'a>, 95 Ok(ron::de::from_bytes(s.as_bytes())?) 98 fn to_json_writer<W>(&self, writer: W) -> Result<()> 103 // let formatter = serde_json::ser::PrettyFormatter::with_indent(b" "); 104 Ok(serde_json::ser::to_writer_pretty(writer, &self)?) 107 fn to_json_string(&self) -> Result<String> 111 Ok(serde_json::ser::to_string_pretty(&self)?) 114 fn from_json_reader<R>(&self, mut rdr: R) -> Result<Self> 117 Self: DeserializeOwned, 119 let mut bytes = Vec::new(); 120 rdr.read_to_end(&mut bytes)?; 121 Ok(serde_json::de::from_slice(&bytes)?) 124 fn from_json_str<'a>(s: &'a str) -> Result<Self> 126 Self: Deserialize<'a>, 128 Ok(serde_json::de::from_slice(s.as_bytes())?) 132 impl<T> Objective for Vec<T> {} 133 impl<K,V> Objective for HashMap<K,V> {} 134 impl<K,V> Objective for BTreeMap<K,V> {}