Skip to main content

derive_mapping/
derive_mapping.rs

1// Requires a live GemStone/S stone.
2//
3// Expected output includes:
4//
5// derived mapped payload: BookingDraft { amount: 100, customer: CustomerDraft { name: "Tariq" }, tags: ["priority", "demo"] }
6// bridge root identity: <number>
7
8use gemstone_rs::{BridgeKeyType, BridgeMapped, Config, Session};
9
10#[derive(Clone, Debug, Eq, PartialEq, BridgeMapped)]
11struct CustomerDraft {
12    #[bridge(key_type = "Symbol")]
13    name: String,
14}
15
16#[derive(Clone, Debug, Eq, PartialEq, BridgeMapped)]
17struct BookingDraft {
18    #[bridge(key = "amount", key_type = "Symbol")]
19    amount: i64,
20    customer: CustomerDraft,
21    tags: Vec<String>,
22}
23
24fn main() -> gemstone_rs::Result<()> {
25    let mut session = Session::login(Config::from_env()?)?;
26    let mut bridge_root = session.bridge_root()?;
27
28    let draft = BookingDraft {
29        amount: 100,
30        customer: CustomerDraft {
31            name: "Tariq".to_string(),
32        },
33        tags: vec!["priority".to_string(), "demo".to_string()],
34    };
35
36    bridge_root.transaction(|root| {
37        root.put_mapped("DerivedBookingDraft", &draft)?;
38        let loaded: BookingDraft = root.get_mapped("DerivedBookingDraft")?;
39        assert_eq!(loaded, draft);
40        root.put_with_key_type(
41            "DerivedBookingDraftSymbolKey",
42            BridgeKeyType::Symbol,
43            "symbol-key-ok",
44        )?;
45        root.remove("DerivedBookingDraft")?;
46        root.remove_with_key_type("DerivedBookingDraftSymbolKey", BridgeKeyType::Symbol)?;
47        println!("derived mapped payload: {loaded:?}");
48        println!("bridge root identity: {}", root.identity_id());
49        Ok(())
50    })?;
51
52    Ok(())
53}