radix_engine_interface/api/
key_value_entry_api.rs1use radix_common::data::scrypto::{scrypto_decode, scrypto_encode, ScryptoDecode, ScryptoEncode};
2use sbor::rust::prelude::*;
3
4pub type KeyValueEntryHandle = u32;
5
6pub trait SystemKeyValueEntryApi<E> {
7 fn key_value_entry_get(&mut self, handle: KeyValueEntryHandle) -> Result<Vec<u8>, E>;
9
10 fn key_value_entry_get_typed<S: ScryptoDecode>(
12 &mut self,
13 handle: KeyValueEntryHandle,
14 ) -> Result<Option<S>, E> {
15 let buffer = self.key_value_entry_get(handle)?;
16 let value: Option<S> = scrypto_decode(&buffer).unwrap();
17 Ok(value)
18 }
19
20 fn key_value_entry_set(
22 &mut self,
23 handle: KeyValueEntryHandle,
24 buffer: Vec<u8>,
25 ) -> Result<(), E>;
26
27 fn key_value_entry_set_typed<S: ScryptoEncode>(
29 &mut self,
30 handle: KeyValueEntryHandle,
31 value: S,
32 ) -> Result<(), E> {
33 let buffer = scrypto_encode(&value).unwrap();
34 self.key_value_entry_set(handle, buffer)
35 }
36
37 fn key_value_entry_remove(&mut self, handle: KeyValueEntryHandle) -> Result<Vec<u8>, E>;
39
40 fn key_value_entry_lock(&mut self, handle: KeyValueEntryHandle) -> Result<(), E>;
42
43 fn key_value_entry_close(&mut self, handle: KeyValueEntryHandle) -> Result<(), E>;
45}