capnweb_server/
cap_table.rs1use crate::RpcTarget;
2use capnweb_core::CapId;
3use dashmap::DashMap;
4use std::sync::Arc;
5
6pub struct CapTable {
7 caps: DashMap<CapId, Arc<dyn RpcTarget>>,
8}
9
10impl CapTable {
11 pub fn new() -> Self {
12 CapTable {
13 caps: DashMap::new(),
14 }
15 }
16
17 pub fn insert(&self, id: CapId, target: Arc<dyn RpcTarget>) {
18 self.caps.insert(id, target);
19 }
20
21 pub fn lookup(&self, id: &CapId) -> Option<Arc<dyn RpcTarget>> {
22 self.caps.get(id).map(|entry| Arc::clone(&*entry))
23 }
24
25 pub fn remove(&self, id: &CapId) -> Option<Arc<dyn RpcTarget>> {
26 self.caps.remove(id).map(|(_, v)| v)
27 }
28
29 pub fn clear(&self) {
30 self.caps.clear();
31 }
32
33 pub fn len(&self) -> usize {
34 self.caps.len()
35 }
36
37 pub fn is_empty(&self) -> bool {
38 self.caps.is_empty()
39 }
40}
41
42impl Default for CapTable {
43 fn default() -> Self {
44 Self::new()
45 }
46}