amethystate_core/
backend.rs1use serde::Serialize;
2use serde::de::DeserializeOwned;
3use std::sync::Arc;
4use uuid::Uuid;
5
6pub trait AmeBackend {
8 type Error;
9 type Raw;
10
11 fn get<T>(&self, path: &str) -> Result<Option<T>, Self::Error>
12 where
13 T: DeserializeOwned;
14
15 fn set_with_source<T: Serialize>(
16 &self,
17 path: &str,
18 value: &T,
19 source: Option<Uuid>,
20 ) -> Result<(), Self::Error>;
21 fn set_owned_with_source<T: Serialize>(
22 &self,
23 path: Arc<str>,
24 value: &T,
25 source: Option<Uuid>,
26 ) -> Result<(), Self::Error>;
27
28 fn set<T>(&self, path: &str, value: &T) -> Result<(), Self::Error>
29 where
30 T: Serialize;
31
32 fn delete(&self, path: &str) -> Result<(), Self::Error>;
33
34 fn delete_with_source(&self, path: &str, source: Option<Uuid>) -> Result<(), Self::Error>;
35
36 fn scan_prefix(&self, prefix: &str) -> Result<Vec<(String, Self::Raw)>, Self::Error>;
37
38 fn decode<T>(&self, raw: &Self::Raw) -> Result<T, Self::Error>
39 where
40 T: DeserializeOwned + Default;
41
42 fn intercepted(&self) -> Self::Error;
43
44 fn key_not_found(&self, key: String) -> Self::Error;
45}
46#[cfg(feature = "async")]
47#[allow(async_fn_in_trait)]
48pub trait AmeBackendAsync {
49 type Error;
50 type Raw;
51
52 async fn get<T>(&self, path: &str) -> Result<Option<T>, Self::Error>
53 where
54 T: DeserializeOwned;
55
56 async fn set<T>(&self, path: &str, value: &T) -> Result<(), Self::Error>
57 where
58 T: Serialize;
59 async fn set_with_source<T: Serialize>(
60 &self,
61 path: &str,
62 value: &T,
63 source: Option<Uuid>,
64 ) -> Result<(), Self::Error>;
65 async fn set_owned_with_source<T: Serialize>(
66 &self,
67 path: Arc<str>,
68 value: &T,
69 source: Option<Uuid>,
70 ) -> Result<(), Self::Error>;
71
72 async fn delete(&self, path: &str) -> Result<(), Self::Error>;
73 async fn delete_with_source(&self, path: &str, source: Option<Uuid>)
74 -> Result<(), Self::Error>;
75
76 async fn scan_prefix(&self, prefix: &str) -> Result<Vec<(String, Self::Raw)>, Self::Error>;
77
78 fn decode<T>(&self, raw: &Self::Raw) -> Result<T, Self::Error>
79 where
80 T: DeserializeOwned + Default;
81
82 fn intercepted(&self) -> Self::Error;
83
84 fn key_not_found(&self, key: String) -> Self::Error;
85}