yugendb_core/
collection.rs1use std::marker::PhantomData;
4
5use serde::{de::DeserializeOwned, Serialize};
6
7use crate::{CollectionName, Key, Result, Store, YugenDbError};
8
9#[derive(Clone)]
11pub struct Collection<T> {
12 store: Store,
13 name: CollectionName,
14 marker: PhantomData<T>,
15}
16
17impl<T> Collection<T> {
18 #[must_use]
20 pub fn new(store: Store, name: CollectionName) -> Self {
21 Self {
22 store,
23 name,
24 marker: PhantomData,
25 }
26 }
27
28 #[must_use]
30 pub fn name(&self) -> &CollectionName {
31 &self.name
32 }
33
34 pub async fn get<K>(&self, key: K) -> Result<Option<T>>
36 where
37 T: DeserializeOwned,
38 K: TryInto<Key>,
39 YugenDbError: From<K::Error>,
40 {
41 self.store.get_from_collection(&self.name, key).await
42 }
43
44 pub async fn set<K>(&self, key: K, value: &T) -> Result<()>
46 where
47 T: Serialize,
48 K: TryInto<Key>,
49 YugenDbError: From<K::Error>,
50 {
51 self.store.set_in_collection(&self.name, key, value).await
52 }
53
54 pub async fn delete<K>(&self, key: K) -> Result<bool>
56 where
57 K: TryInto<Key>,
58 YugenDbError: From<K::Error>,
59 {
60 self.store.delete_from_collection(&self.name, key).await
61 }
62
63 pub async fn exists<K>(&self, key: K) -> Result<bool>
65 where
66 K: TryInto<Key>,
67 YugenDbError: From<K::Error>,
68 {
69 self.store.exists_in_collection(&self.name, key).await
70 }
71
72 pub async fn scan_prefix(&self, prefix: impl Into<String>) -> Result<Vec<(Key, T)>>
74 where
75 T: DeserializeOwned,
76 {
77 self.store
78 .scan_prefix_in_collection(&self.name, prefix)
79 .await
80 }
81}