Crate struct_patch
source ·Expand description
struct_patch
includes struct_patch_derive
and struct_patch_traits
Please see these crates for docs
A derive macro struct_patch::Patch
helps you generate patch structure {Struct}Patch
with all fields in optional, such that patch structure is good for partial update by apply
method of struct_patch::traits::Patch
traits.
Following is an small example with json format
use struct_patch::Patch;
use serde::{Deserialize, Serialize};
#[derive(Default, Patch)]
#[patch_derive(Debug, Default, Deserialize, Serialize)]
struct Item {
field_bool: bool,
field_int: usize,
field_string: String,
}
fn patch_json() {
use struct_patch::traits::Patch;
let mut item = Item::default();
let data = r#"{
"field_int": 7
}"#;
let patch = serde_json::from_str(data).unwrap();
assert_eq!(
format!("{patch:?}"),
"ItemPatch { field_bool: None, field_int: Some(7), field_string: None }"
);
item.apply(patch);
assert_eq!(item.field_bool, false);
assert_eq!(item.field_int, 7);
assert_eq!(item.field_string, "");
}
Re-exports
pub use struct_patch_derive;
Modules
Define the behavior between patch struct and original sturct
Derive Macros
Patch
help you patch Rust instance, and easy to partial update.