1use 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 let rx_a = bus.subscribe(Foo::fields().a());
26
27 let rx_c = bus.subscribe(Foo::fields().bar().c());
29
30 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}