balius_runtime/kv/
mod.rs

1use std::sync::Arc;
2use tokio::sync::Mutex;
3
4use crate::wit::balius::app::kv as wit;
5
6pub use wit::{Host as CustomKv, KvError, Payload};
7
8#[derive(Clone)]
9pub enum Kv {
10    Mock,
11    Custom(Arc<Mutex<dyn wit::Host + Send + Sync>>),
12}
13
14#[async_trait::async_trait]
15impl wit::Host for Kv {
16    async fn get_value(&mut self, key: String) -> Result<Payload, KvError> {
17        match self {
18            Self::Mock => todo!(),
19            Self::Custom(kv) => {
20                let mut lock = kv.lock().await;
21                lock.get_value(key).await
22            }
23        }
24    }
25
26    async fn set_value(&mut self, key: String, value: Payload) -> Result<(), KvError> {
27        match self {
28            Self::Mock => {
29                println!("{}:{}", key, hex::encode(value));
30                Ok(())
31            }
32            Self::Custom(kv) => {
33                let mut lock = kv.lock().await;
34                lock.set_value(key, value).await
35            }
36        }
37    }
38
39    async fn list_values(&mut self, prefix: String) -> Result<Vec<String>, KvError> {
40        match self {
41            Self::Mock => todo!(),
42            Self::Custom(kv) => {
43                let mut lock = kv.lock().await;
44                lock.list_values(prefix).await
45            }
46        }
47    }
48}