hakuban 0.7.2

Data-object sharing library
Documentation
use crate::{descriptor::ObjectDescriptor, object::{expose::ObjectExposeContract, observe::ObjectObserveContract}, LocalExchange};

//TODO: composition cost, desired update frequency

#[must_use = "Call .expose() or .observe() at the end of the build chain."]
pub struct ObjectContractBuilder {
	local_exchange: LocalExchange,
	descriptor: ObjectDescriptor,
}


//LockCheck:  scope=ObjectContractBuilder
impl ObjectContractBuilder {
	//LockCheck:
	pub(crate) fn new(local_exchange: LocalExchange, descriptor: ObjectDescriptor) -> ObjectContractBuilder {
		ObjectContractBuilder { local_exchange, descriptor }
	}

	//LockCheck:  call=LocalExchange::object_acquire  call=ObjectObserveContract::new  call=LocalExchange::object_changed
	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
	}

	//LockCheck:  call=LocalExchange::object_acquire  call=ObjectExposeContract::new  call=LocalExchange::object_changed
	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
	}
}