| Crates.io | hashmark |
| lib.rs | hashmark |
| version | 0.1.0 |
| created_at | 2026-01-13 04:57:51.215438+00 |
| updated_at | 2026-01-13 04:57:51.215438+00 |
| description | Merkle tree hashing for efficient change detection |
| homepage | https://github.com/jerry73204/hashmark |
| repository | https://github.com/jerry73204/hashmark |
| max_upload_size | |
| id | 2039338 |
| size | 134,261 |
Merkle tree hashing for efficient change detection in Rust.
hashmark builds Merkle trees from your data structures using serde, enabling:
address.city)use serde::Serialize;
use hashmark::{tree_hash, merkle_diff, Diff};
#[derive(Serialize)]
struct User {
name: String,
age: u32,
}
let old = User { name: "Alice".into(), age: 30 };
let new = User { name: "Alice".into(), age: 31 };
let m1 = tree_hash(&old).unwrap();
let m2 = tree_hash(&new).unwrap();
match merkle_diff(&m1, &m2) {
Diff::Same => println!("No changes"),
Diff::Different(detail) => {
for (path, change) in detail.changed_paths() {
println!("{}: {:?}", path, change);
}
}
}
Send Merkle trees between peers for efficient distributed sync:
use serde::{Serialize, Deserialize};
use bevy_reflect::Reflect;
use hashmark::{tree_hash, Merkle};
#[derive(Serialize, Deserialize, Reflect)]
struct Config {
port: u16,
debug: bool,
}
// Peer A: send merkle tree (not the data)
let config = Config { port: 8080, debug: true };
let merkle = tree_hash(&config).unwrap();
let json = serde_json::to_string(&merkle).unwrap();
// Peer B: receive and compare against local data
let received: Merkle = serde_json::from_str(&json).unwrap();
let local = Config { port: 9000, debug: true };
let changes = received.diff_with_data_reflect(&local).unwrap();
for change in &changes {
println!("{}: {:?}", change.path, change.change_type);
// change.local: Option<&dyn PartialReflect>
}
MIT