morphix
A Rust library for observing and serializing mutations.
Installation
Add this to your Cargo.toml:
[]
= { = "0.14", = ["json"] }
Basic Usage
use Serialize;
use json;
use Json;
use ;
// 1. Define any data structure with `#[derive(Observe)]`.
let mut foo = Foo ;
// 2. Use `observe!` to mutate data and track mutations.
let Json = observe!.unwrap;
// 3. Inspect the mutations.
assert_eq!;
// 4. The original data structure is also mutated.
assert_eq!;
Mutation Types
Morphix recognizes three types of mutations:
Replace
The most general mutation type, used for any mutation that replaces a value:
foo.a.b = 1; // Replace at .a.b
foo.num *= 2; // Replace at .num
foo.vec.clear; // Replace at .vec
Append
Optimized for appending to strings and vectors:
foo.a.b += "text"; // Append to .a.b
foo.a.b.push_str; // Append to .a.b
foo.vec.push; // Append to .vec
foo.vec.extend; // Append to .vec
Truncate
Optimized for truncating strings and vectors:
foo.a.b.truncate; // Truncate n-5 chars from .a.b
foo.vec.pop; // Truncate 1 element from .vec
Batch
Multiple mutations combined into a single operation.
Features
derive(default): Enables the Observe derive macro- Mutation kinds:
append(default): EnablesAppendmutation kindtruncate(default): EnablesTruncatemutation kind
- Adapters:
json: Includes JSON serialization support viaserde_jsonyaml: Includes YAML serialization support viaserde_yaml_ng