1//! The Worker's adapter: the three hubs, in the household's object. It has no other capability, so the service 2//! it is given serves no other route. 3 4use whiskers_core::{ChatState, Household, MemoryDoc}; 5use whiskers_ports::{HasChat, HasHousehold, HasMemory}; 6use worker::Env; 7 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 { 18 /// 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} 28 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}