use crate::api::*;
use crate::resources::TextResource;
use crate::substore::{AnnotationSubStore, AnnotationSubStoreHandle};
impl<'store> FullHandle<AnnotationSubStore> for ResultItem<'store, AnnotationSubStore> {
fn fullhandle(&self) -> <AnnotationSubStore as Storable>::FullHandleType {
self.handle()
}
}
impl<'store, I> FullHandleToResultItem<'store, AnnotationSubStore>
for FromHandles<'store, AnnotationSubStore, I>
where
I: Iterator<Item = AnnotationSubStoreHandle>,
{
fn get_item(
&self,
handle: AnnotationSubStoreHandle,
) -> Option<ResultItem<'store, AnnotationSubStore>> {
self.store.substore(handle)
}
}
impl<'store, I> FullHandleToResultItem<'store, AnnotationSubStore>
for FilterAllIter<'store, AnnotationSubStore, I>
where
I: Iterator<Item = ResultItem<'store, AnnotationSubStore>>,
{
fn get_item(
&self,
handle: AnnotationSubStoreHandle,
) -> Option<ResultItem<'store, AnnotationSubStore>> {
self.store.substore(handle)
}
}
impl<'store> ResultItem<'store, AnnotationSubStore> {
pub fn annotations(&self) -> ResultIter<impl Iterator<Item = ResultItem<'store, Annotation>>> {
ResultIter::new_sorted(FromHandles::new(
self.as_ref().annotations.iter().copied(),
self.store(),
))
}
pub fn resources(&self) -> ResultIter<impl Iterator<Item = ResultItem<'store, TextResource>>> {
ResultIter::new_sorted(FromHandles::new(
self.as_ref().resources.iter().copied(),
self.store(),
))
}
pub fn datasets(
&self,
) -> ResultIter<impl Iterator<Item = ResultItem<'store, AnnotationDataSet>>> {
ResultIter::new_sorted(FromHandles::new(
self.as_ref().annotationsets.iter().copied(),
self.store(),
))
}
pub fn substores<'a>(
&'a self,
) -> ResultIter<impl Iterator<Item = ResultItem<'a, AnnotationSubStore>>> {
let handle = self.handle();
let store = self.store();
ResultIter::new_sorted(store.iter().filter_map(move |a: &'a AnnotationSubStore| {
if a.parents.contains(&Some(handle)) {
Some(a.as_resultitem(store, store))
} else {
None
}
}))
}
}