Skip to main content

bridge_root_mapping/
bridge_root_mapping.rs

1// Requires a live GemStone/S stone.
2//
3// Expected output includes:
4//
5// bridge root: GemStoneRsBridgeRoot
6// MyTestDict OOP: <number>
7// loaded payload: BookingDraft { name: "Tariq", amount: 100, currency: "GBP" }
8
9use 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}