use cmrdts::{ActorId, AddCtx, CmRDT, Dot, PNCounter, VClock};
fn main() {
let alice_id = ActorId(1);
let bob_id = ActorId(2);
let mut alice_counter = PNCounter::default();
let mut bob_counter = PNCounter::default();
println!("Initial state: {}", alice_counter.read());
let alice_op_ctx = AddCtx {
dot: Dot {
actor: alice_id,
counter: 1,
},
clock: VClock::default(),
};
alice_counter.apply(cmrdts::pn_counter::Op::Inc(5), alice_op_ctx);
println!("After Alice increments by 5: {}", alice_counter.read());
let bob_op_1_ctx = AddCtx {
dot: Dot {
actor: bob_id,
counter: 1,
},
clock: VClock::default(),
};
let bob_op_2_ctx = AddCtx {
dot: Dot {
actor: bob_id,
counter: 2,
},
clock: VClock::default(),
};
bob_counter.apply(cmrdts::pn_counter::Op::Inc(2), bob_op_1_ctx);
bob_counter.apply(cmrdts::pn_counter::Op::Dec(1), bob_op_2_ctx);
println!("Bob's counter value: {}", bob_counter.read());
alice_counter.merge(bob_counter);
println!("Final value after merge: {}", alice_counter.read()); }