watch/
watch.rs

1// examples/watch.rs
2use differs::{ChangeEventBus, Fields, HasFields as _};
3use serde::{Deserialize, Serialize};
4
5#[derive(Fields, Serialize, Deserialize, Debug, Clone)]
6struct Foo {
7    a: i64,
8    bar: Bar,
9}
10
11#[derive(Fields, Serialize, Deserialize, Debug, Clone)]
12struct Bar {
13    c: String,
14    b: Baz,
15}
16#[derive(Fields, Serialize, Deserialize, Debug, Clone)]
17struct Baz {
18    d: String,
19}
20
21fn main() {
22    let mut bus = ChangeEventBus::new();
23    
24    // Subscribe to a simple scalar
25    let rx_a = bus.subscribe(Foo::fields().a());
26
27    // Subscribe to a nested field
28    let rx_c = bus.subscribe(Foo::fields().bar().c());
29
30    // Pretend our file-watcher detected changes:
31    bus.publish("a", "42".into());
32    bus.publish("bar.c", "\"updated\"".into());
33
34    println!("got a   = {}", rx_a.recv().unwrap());
35    println!("got bar.c = {}", rx_c.recv().unwrap());
36}