holda 0.1.0

Convenience macros for creating domain objects with serde support.
Documentation
#[cfg(feature = "serde")]
mod tests {
    use holda::Holda;
    use serde::Deserialize;
    use serde::Serialize;
    use std::fmt;

    #[derive(Serialize, Deserialize, Debug, PartialEq, Clone, Hash, Eq, PartialOrd, Ord)]
    struct MyCustomStruct {
        field1: i32,
        field2: String,
    }

    impl fmt::Display for MyCustomStruct {
        fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
            write!(f, "({}, {})", self.field1, self.field2)
        }
    }

    #[derive(Holda)]
    struct MyCustomStructWrapper {
        inner: MyCustomStruct,
    }

    #[test]
    fn test_custom_struct_wrapper() {
        let custom_struct = MyCustomStruct {
            field1: 10,
            field2: "test".to_string(),
        };
        let wrapper = MyCustomStructWrapper::new(custom_struct);
        assert_eq!(wrapper.field1, 10);
        assert_eq!(wrapper.field2, "test");
    }

    #[test]
    fn test_custom_struct_serde() {
        let custom_struct = MyCustomStruct {
            field1: 20,
            field2: "serde_test".to_string(),
        };
        let wrapper = MyCustomStructWrapper::new(custom_struct.clone());
        assert_eq!(*wrapper, custom_struct);

        let serialized = serde_json::to_string(&wrapper).unwrap();
        let deserialized: MyCustomStructWrapper = serde_json::from_str(&serialized).unwrap();
        assert_eq!(wrapper, deserialized);
    }
}