1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
use serde::Serialize; use simple_error::*; use std::str::FromStr; /// A trait that allows to generate complex objects from simple companion objects. /// A companion type should have a simple API, leaving most fields optional. pub trait Generator<Output: Serialize>: FromStr<Err = SimpleError> + Clone { /// Merge this companion with the another, default one. /// The options present in this object will override those in the default one. fn merge_with_default(self, default: Self) -> Self; /// Generate the complex object from this companion object. fn generate(&self) -> Result<Output, SimpleError>; /// Generate and serialize the complex object fn encode(&self) -> Result<String, SimpleError> { let res = self.generate()?; Ok(try_with!( serde_json::to_string_pretty(&res), "failed to serialize into JSON" )) } }