use std::error::Error;
use crate::dataset::*;
use crate::quad::streaming_mode::*;
use crate::quad::*;
pub use crate::triple::stream::{SinkError, SourceError, StreamError, StreamResult};
mod _filter;
pub use _filter::*;
mod _filter_map;
pub use _filter_map::*;
mod _iterator;
pub use _iterator::*;
mod _map;
pub use _map::*;
pub type QsTerm<S> =
<<<S as QuadSource>::Quad as QuadStreamingMode>::UnsafeQuad as UnsafeQuad>::Term;
#[allow(clippy::upper_case_acronyms)]
#[deprecated(
since = "0.6.3",
note = "Was renamed to QsTerm, according to naming conventions"
)]
pub type QSTerm<S> = QsTerm<S>;
pub trait QuadSource {
type Error: 'static + Error;
type Quad: QuadStreamingMode;
fn try_for_some_quad<F, E>(&mut self, f: &mut F) -> StreamResult<bool, Self::Error, E>
where
F: FnMut(StreamedQuad<Self::Quad>) -> Result<(), E>,
E: Error;
#[inline]
fn try_for_each_quad<F, E>(&mut self, f: F) -> StreamResult<(), Self::Error, E>
where
F: FnMut(StreamedQuad<Self::Quad>) -> Result<(), E>,
E: Error,
{
let mut f = f;
while self.try_for_some_quad(&mut f)? {}
Ok(())
}
#[inline]
fn for_some_quad<F>(&mut self, f: &mut F) -> Result<bool, Self::Error>
where
F: FnMut(StreamedQuad<Self::Quad>),
{
self.try_for_some_quad(&mut |t| -> Result<(), Self::Error> {
f(t);
Ok(())
})
.map_err(StreamError::inner_into)
}
#[inline]
fn for_each_quad<F>(&mut self, f: F) -> Result<(), Self::Error>
where
F: FnMut(StreamedQuad<Self::Quad>),
{
let mut f = f;
while self.for_some_quad(&mut f)? {}
Ok(())
}
#[inline]
fn filter_quads<F>(self, filter: F) -> FilterSource<Self, F>
where
Self: Sized,
F: FnMut(&StreamedQuad<Self::Quad>) -> bool,
{
FilterSource {
source: self,
filter,
}
}
#[inline]
fn filter_map_quads<F, T>(self, filter_map: F) -> FilterMapSource<Self, F>
where
Self: Sized,
F: FnMut(StreamedQuad<Self::Quad>) -> Option<T>,
{
FilterMapSource {
source: self,
filter_map,
}
}
#[inline]
fn map_quads<F, T>(self, map: F) -> MapSource<Self, F>
where
Self: Sized,
F: FnMut(StreamedQuad<Self::Quad>) -> T,
{
MapSource { source: self, map }
}
fn size_hint_quads(&self) -> (usize, Option<usize>) {
(0, None)
}
fn collect_quads<D>(self) -> StreamResult<D, Self::Error, <D as Dataset>::Error>
where
Self: Sized,
D: CollectibleDataset,
{
D::from_quad_source(self)
}
#[inline]
fn add_to_dataset<D: MutableDataset>(
self,
dataset: &mut D,
) -> StreamResult<usize, Self::Error, <D as MutableDataset>::MutationError>
where
Self: Sized,
{
dataset.insert_all(self)
}
}
#[cfg(test)]
mod test;