substreams_sink_kv/
store.rs1use {
4 crate::{
5 pb::sf::substreams::sink::types::v1::{KvPairs,KvPair},
6 externs,
7 }
8};
9
10
11pub trait StoreNew {
12 fn new() -> Self;
13}
14
15pub trait StoreGet {
16 fn get<K: AsRef<str>>(&self, key: K) -> Option<KvPair>;
17 fn get_many(&self, keys: Vec<String>) -> Option<KvPairs>;
18 fn prefix<K: AsRef<str>>(&self, prefix: K, limit: Option<u32>) -> KvPairs;
19 fn scan<K: AsRef<str>>(&self, start: K, exclusive_end: K, limit: Option<u32>) -> KvPairs;
20
21}
22
23pub struct Store {}
24
25impl StoreNew for Store {
26 fn new() -> Self { Self {} }
27}
28
29impl StoreGet for Store {
30 fn get<K: AsRef<str>>(&self, key: K) -> Option<KvPair> {
31 return externs::kv_get_key(key)
32 }
33 fn get_many(&self, keys: Vec<String>) -> Option<KvPairs> { return externs::kv_get_many_keys(keys) }
34 fn prefix<K: AsRef<str>>(&self, key: K, limit: Option<u32>) -> KvPairs { return externs::kv_prefix(key, limit) }
35 fn scan<K: AsRef<str>>(&self, start: K, exclusive_end: K, limit: Option<u32>) -> KvPairs { return externs::kv_scan(start, exclusive_end, limit) }
36}