use crate::{descriptor::ObjectDescriptor, object::{expose::ObjectExposeContract, observe::ObjectObserveContract}, LocalExchange};
#[must_use = "Call .expose() or .observe() at the end of the build chain."]
pub struct ObjectContractBuilder {
local_exchange: LocalExchange,
descriptor: ObjectDescriptor,
}
impl ObjectContractBuilder {
pub(crate) fn new(local_exchange: LocalExchange, descriptor: ObjectDescriptor) -> ObjectContractBuilder {
ObjectContractBuilder { local_exchange, descriptor }
}
pub fn observe(self) -> ObjectObserveContract {
let object_core = self.local_exchange.shared.object_acquire(&self.descriptor);
let ret = ObjectObserveContract::new(self.local_exchange.shared.local_exchange(), object_core);
self.local_exchange.shared.object_changed(self.descriptor.clone());
ret
}
pub fn expose(self) -> ObjectExposeContract {
let object_core = self.local_exchange.shared.object_acquire(&self.descriptor);
let ret = ObjectExposeContract::new(self.local_exchange.shared.local_exchange(), object_core, 1000);
self.local_exchange.shared.object_changed(self.descriptor.clone());
ret
}
}