use super::*;
impl Context {
pub (crate) fn insert_into_root_index(&self, subject_id: SubjectId, subject: &Subject) -> Result<(),WriteError> {
self.root_index()?.insert(self, subject_id.id, subject)
}
pub (crate) fn apply_head(&self, head: &MemoRefHead) -> Result<MemoRefHead,WriteError> {
self.stash.apply_head(&self.slab, head)
}
pub (crate) fn get_subject(&self, subject_id: SubjectId) -> Result<Option<Subject>, RetrieveError> {
self.root_index()?.get(&self, subject_id.id)
}
pub (crate) fn get_subject_with_head(&self, mut head: MemoRefHead) -> Result<Subject, RetrieveError> {
if head.len() == 0 {
return Err(RetrieveError::InvalidMemoRefHead);
}
if let Some(subject_id) = head.subject_id() {
head.apply( &self.stash.get_head(subject_id), &self.slab )?;
}
let subject = Subject::reconstitute(&self, head)?;
return Ok(subject);
}
pub (crate) fn get_subject_handle_with_head (&self, head: MemoRefHead) -> Result<SubjectHandle, RetrieveError> {
Ok(SubjectHandle{
id: head.subject_id().ok_or( RetrieveError::InvalidMemoRefHead )?,
subject: self.get_subject_with_head(head)?,
context: self.clone()
})
}
}