yukina/
lib.rs

1// Shared part with the kv binary
2use chrono::{DateTime, Utc};
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Serialize, Deserialize, Default)]
6pub struct RemoteSizeDBItem {
7    pub size: Option<u64>,
8    pub record_time: DateTime<Utc>,
9}
10
11#[derive(Debug, Serialize, Deserialize, Default)]
12pub struct LocalSizeDBItem {
13    pub size: u64,
14}
15
16impl From<u64> for LocalSizeDBItem {
17    fn from(size: u64) -> Self {
18        LocalSizeDBItem { size }
19    }
20}
21
22impl From<usize> for LocalSizeDBItem {
23    fn from(size: usize) -> Self {
24        LocalSizeDBItem { size: size as u64 }
25    }
26}
27
28pub fn db_get<T>(db: Option<&sled::Db>, key: &str) -> anyhow::Result<T>
29where
30    T: serde::de::DeserializeOwned + Default,
31{
32    if let Some(db) = db {
33        let value = db.get(key)?;
34        match value {
35            Some(value) => Ok(bincode::deserialize(&value)?),
36            None => Err(anyhow::anyhow!("Key not found")),
37        }
38    } else {
39        Ok(T::default())
40    }
41}
42
43pub fn db_set<T>(db: Option<&sled::Db>, key: &str, value: T) -> anyhow::Result<()>
44where
45    T: serde::Serialize,
46{
47    if let Some(db) = db {
48        let value = bincode::serialize(&value)?;
49        db.insert(key, value)?;
50    }
51    Ok(())
52}
53
54pub fn db_remove(db: Option<&sled::Db>, key: &str) -> anyhow::Result<()> {
55    if let Some(db) = db {
56        db.remove(key)?;
57    }
58    Ok(())
59}