1use crate::StateRead;
2use std::{any::Any, collections::BTreeMap};
3use tendermint::abci;
4
5pub trait StateWrite: StateRead + Send + Sync {
7 fn put_raw(&mut self, key: String, value: Vec<u8>);
9
10 fn delete(&mut self, key: String);
12
13 fn nonverifiable_put_raw(&mut self, key: Vec<u8>, value: Vec<u8>);
15
16 fn nonverifiable_delete(&mut self, key: Vec<u8>);
18
19 fn object_put<T: Clone + Any + Send + Sync>(&mut self, key: &'static str, value: T);
26
27 fn object_delete(&mut self, key: &'static str);
29
30 fn object_merge(&mut self, objects: BTreeMap<&'static str, Option<Box<dyn Any + Send + Sync>>>);
34
35 fn record(&mut self, event: abci::Event);
37}
38
39impl<'a, S: StateWrite + Send + Sync> StateWrite for &'a mut S {
40 fn put_raw(&mut self, key: String, value: jmt::OwnedValue) {
41 (**self).put_raw(key, value)
42 }
43
44 fn delete(&mut self, key: String) {
45 (**self).delete(key)
46 }
47
48 fn nonverifiable_delete(&mut self, key: Vec<u8>) {
49 (**self).nonverifiable_delete(key)
50 }
51
52 fn nonverifiable_put_raw(&mut self, key: Vec<u8>, value: Vec<u8>) {
53 (**self).nonverifiable_put_raw(key, value)
54 }
55
56 fn object_put<T: Clone + Any + Send + Sync>(&mut self, key: &'static str, value: T) {
57 (**self).object_put(key, value)
58 }
59
60 fn object_delete(&mut self, key: &'static str) {
61 (**self).object_delete(key)
62 }
63
64 fn object_merge(
65 &mut self,
66 objects: BTreeMap<&'static str, Option<Box<dyn Any + Send + Sync>>>,
67 ) {
68 (**self).object_merge(objects)
69 }
70
71 fn record(&mut self, event: abci::Event) {
72 (**self).record(event)
73 }
74}