Skip to main content

lb_rs/model/
core_tree.rs

1use std::hash::BuildHasher;
2
3use crate::model::file_like::FileLike;
4use crate::model::tree_like::{TreeLike, TreeLikeMut};
5use serde::Serialize;
6use uuid::Uuid;
7
8use super::errors::{LbResult, Unexpected};
9
10impl<F, S> TreeLike for db_rs::LookupTable<Uuid, F, S>
11where
12    F: FileLike + Serialize,
13    S: BuildHasher + Default,
14{
15    type F = F;
16
17    fn ids(&self) -> Vec<Uuid> {
18        self.get().keys().copied().collect()
19    }
20
21    fn maybe_find(&self, id: &Uuid) -> Option<&Self::F> {
22        self.get().get(id)
23    }
24}
25
26impl<F, S> TreeLikeMut for db_rs::LookupTable<Uuid, F, S>
27where
28    F: FileLike + Serialize,
29    S: BuildHasher + Default,
30{
31    fn insert(&mut self, f: Self::F) -> LbResult<Option<Self::F>> {
32        db_rs::LookupTable::insert(self, *f.id(), f).map_unexpected()
33    }
34
35    fn remove(&mut self, id: Uuid) -> LbResult<Option<Self::F>> {
36        db_rs::LookupTable::remove(self, &id).map_unexpected()
37    }
38
39    fn clear(&mut self) -> LbResult<()> {
40        db_rs::LookupTable::clear(self).map_unexpected()
41    }
42}