Skip to main content

amethystate_core/
backend.rs

1use serde::Serialize;
2use serde::de::DeserializeOwned;
3use std::sync::Arc;
4use uuid::Uuid;
5
6//TODO: bullshit
7pub 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}