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}