struct-patch 0.1.5

A lib help you patch Rust instance, and easy to partial update configures.
Documentation

Struct Patch

Crates.io MIT licensed Docs

A lib help you patch Rust instance, and easy to partial update configures.

Introduction

A derive macro struct_patch::Patch helps you generate patch structure with all fields in optional, and implement struct_patch::traits::Patch, such that we can partial update with apply method.

Quick Example

    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, "");
    }

Attributes

Following are attributes you can easy to use patch a struct as you want

  • patch_derive: passing the derives to patch struct
  • patch_name: specify the patch struct name, default name is {struct name}Patch

Methods for original structure

The struct_patch::traits::Patch will implement, you can check the docs for details.

  • apply: apply the patch, only update the existing fields
  • into_patch_by_diff: diff on a previous state and get the patch instance
  • default_patch: get an empty patch instance

Methods for patch structure

With status feature, the patch struct will implement PatchStatus trait and providing following methods:

  • is_empty: check there is anything in the patch