derive_mapping/
derive_mapping.rs1use 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}