use preftool::*;
use preftool_derive::*;
struct SomeWrapperForReasons(String);
impl Options for SomeWrapperForReasons {
fn bind_config<C: ::preftool::Configuration>(
&mut self,
config: &C,
) -> ::preftool::ValidationResult<()> {
Options::bind(&mut self.0, config)
}
fn validate(&self) -> ::preftool::ValidationResult<()> {
Ok(())
}
}
impl FromConfig for SomeWrapperForReasons {
fn from_config<C: Configuration>(config: &C) -> ValidationResult<Self> {
let mut ret = SomeWrapperForReasons(String::new());
ret.bind(config)?;
Ok(ret)
}
}
impl Into<String> for SomeWrapperForReasons {
fn into(self) -> String {
self.0
}
}
impl From<String> for SomeWrapperForReasons {
fn from(s: String) -> Self {
Self(s)
}
}
#[derive(Options, PartialEq, Default, Debug)]
struct Simple {
#[preftool(name = "foo", from = "SomeWrapperForReasons")]
name: String,
}
#[derive(Options, PartialEq, Default, Debug)]
struct Wrapper {
nested: Simple,
#[preftool(flatten)]
flattened: Simple,
}
#[test]
fn works_with_empty_config() {
let config = config!();
let value = Simple::from_config(&config).unwrap();
assert_eq!(
value,
Simple {
name: "".to_owned()
}
);
}
#[test]
fn reads_value_from_config() {
let config = config!("foo" => "bar");
let value = Simple::from_config(&config).unwrap();
assert_eq!(
value,
Simple {
name: "bar".to_owned()
}
);
}
#[test]
fn nested_structs() {
let config = config!(
"foo" => "flattened",
"nested:foo" => "nested");
let value = Wrapper::from_config(&config).unwrap();
assert_eq!(
value,
Wrapper {
nested: Simple {
name: "nested".to_owned()
},
flattened: Simple {
name: "flattened".to_owned()
},
}
);
}