1use 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}