whiskers.git / backend / worker / src / backend.rs

The Worker's adapter: the three hubs, in the household's object. It has no other capability, so the service it is given serves no other route.

4use whiskers_core::{ChatState, Household, MemoryDoc};
5use whiskers_ports::{HasChat, HasHousehold, HasMemory};
6use worker::Env;
8use crate::hub::{OBJECTS, ObjectHub};
9use crate::household::HouseholdId;
10
11pub struct ObjectBackend {
12    memory: ObjectHub<MemoryDoc>,
13    household: ObjectHub<Household>,
14    chat: ObjectHub<ChatState>,
15}
16
17impl ObjectBackend {

One household's backend. Fails only if the object binding is missing from the configuration.

19    pub fn new(env: &Env, household: &HouseholdId) -> worker::Result<Self> {
20        let namespace = || env.durable_object(OBJECTS);
21        Ok(Self {
22            memory: ObjectHub::new(namespace()?, household.clone()),
23            household: ObjectHub::new(namespace()?, household.clone()),
24            chat: ObjectHub::new(namespace()?, household.clone()),
25        })
26    }
27}
29impl HasMemory for ObjectBackend {
30    type Memory = ObjectHub<MemoryDoc>;
31    fn memory(&self) -> &Self::Memory {
32        &self.memory
33    }
34}
35
36impl HasHousehold for ObjectBackend {
37    type Household = ObjectHub<Household>;
38    fn household(&self) -> &Self::Household {
39        &self.household
40    }
41}
42
43impl HasChat for ObjectBackend {
44    type Chat = ObjectHub<ChatState>;
45    fn chat(&self) -> &Self::Chat {
46        &self.chat
47    }
48}