fields/
fields.rs

1// examples/fields.rs
2use differs::{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    z: Baz,
16}
17#[derive(Fields, Serialize, Deserialize, Debug, Clone)]
18struct Baz {
19    d: String,
20}
21#[derive(Fields)]
22pub struct Vec2(pub f32, pub f32);
23
24#[derive(Fields)]
25pub enum Message {
26    Quit,                   // "Quit"
27    Move(i32, i32),         // "Move.item0", "Move.item1"
28    Write { text: String }, // "Write.text"
29}
30
31fn main() {
32    println!("a   = {:?}", Foo::fields().a());
33    println!("bar.c = {:?}", Foo::fields().bar().c());
34    println!("bar.b.d = {:?}", Foo::fields().bar().b().d());
35    println!("bar.z.d = {:?}", Foo::fields().bar().z().d());
36    println!("{:?}", Vec2::fields().item0()); // "item0"
37    println!("{:?}", Message::fields().Quit()); // "Quit"
38    println!("{:?}", Message::fields().Move().item1()); // "Move.item1"
39    println!("{:?}", Message::fields().Write().text()); // "Write.text"
40}