1pub use serde_extensions_derive::*;
2
3pub trait Overwrite {
4 fn overwrite<'de, D>(&mut self, d: D) -> Result<(), D::Error>
5 where
6 D: serde::Deserializer<'de>;
7}
8
9#[cfg(test)]
10mod tests {
11 use std::{collections::HashMap, path::PathBuf};
12
13 use super::Overwrite;
14 use toml::Value;
15
16 #[derive(Debug, Overwrite)]
17 struct Test {
18 a: PathBuf,
19 b: String,
20 c: Vec<String>,
21 d: u32,
22 e: HashMap<String, String>,
23 }
24
25 const TEST_TOML: &'static str = r#"
26a = "/test/asdf"
27c = ["c", "c"]
28[e]
29test="asdf"
30"#;
31
32 #[test]
33 pub fn overwrite_works() {
34 let mut e = HashMap::new();
35 e.insert("test", "fdsa");
36 let mut test = Test {
37 a: PathBuf::default(),
38 b: "b".into(),
39 c: vec!["asdf".into()],
40 d: 0,
41 e: HashMap::new(),
42 };
43 let value: Value = toml::from_str(TEST_TOML).unwrap();
44 test.overwrite(value).unwrap();
45
46 assert_eq!(
47 format!("{test:?}"),
48 r#"Test { a: "/test/asdf", b: "b", c: ["c", "c"], d: 0, e: {"test": "asdf"} }"#
49 )
50 }
51}