bridge_root_mapping/
bridge_root_mapping.rs1use gemstone_rs::{BridgeDictionary, BridgeMapped, BridgeValue, Config, Session};
10
11#[derive(Debug, Eq, PartialEq)]
12struct BookingDraft {
13 name: String,
14 amount: i64,
15 currency: String,
16}
17
18impl BridgeMapped for BookingDraft {
19 fn to_bridge_value(&self) -> BridgeValue {
20 BridgeValue::dictionary([
21 ("name".to_string(), BridgeValue::from(self.name.clone())),
22 ("amount".to_string(), BridgeValue::from(self.amount)),
23 (
24 "currency".to_string(),
25 BridgeValue::from(self.currency.clone()),
26 ),
27 ])
28 }
29
30 fn from_bridge_dictionary(dictionary: &mut BridgeDictionary<'_>) -> gemstone_rs::Result<Self> {
31 Ok(Self {
32 name: dictionary.at_string("name")?,
33 amount: dictionary.at_smallint("amount")?,
34 currency: dictionary.at_string("currency")?,
35 })
36 }
37}
38
39fn main() -> gemstone_rs::Result<()> {
40 let mut session = Session::login(Config::from_env()?)?;
41
42 let payload = BookingDraft {
43 name: "Tariq".to_string(),
44 amount: 100,
45 currency: "GBP".to_string(),
46 };
47
48 let mut bridge_root = session.bridge_root()?;
49 let payload_oop = bridge_root.put_mapped("MyTestDict", &payload)?;
50 let stored = bridge_root.get_oop("MyTestDict")?;
51 assert_eq!(payload_oop, stored);
52
53 let loaded: BookingDraft = bridge_root.get_mapped("MyTestDict")?;
54 assert_eq!(loaded, payload);
55
56 println!("bridge root: {}", bridge_root.name());
57 println!("bridge root OOP: {}", bridge_root.oop().raw());
58 println!("MyTestDict OOP: {}", stored.raw());
59 println!("loaded payload: {loaded:?}");
60
61 bridge_root.commit()?;
62 Ok(())
63}