kgdata 4.0.1

Library to process dumps of knowledge graphs (Wikipedia, DBpedia, Wikidata)
Documentation
use rayon::prelude::*;

use super::ParallelDataset;

#[derive(Clone)]
pub struct MapOp<D: ParallelDataset, F> {
    pub base: D,
    pub op: F,
}

#[derive(Clone)]
pub struct FlatMapOp<D: ParallelDataset, F> {
    pub base: D,
    pub op: F,
}

impl<D, F, R> IntoParallelIterator for MapOp<D, F>
where
    D: ParallelDataset,
    F: (Fn(D::Item) -> R) + Sync + Send,
    R: Send,
{
    type Iter = rayon::iter::Map<D::Iter, F>;
    type Item = F::Output;

    fn into_par_iter(self) -> Self::Iter {
        self.base.into_par_iter().map(self.op)
    }
}

impl<D, F, R> ParallelDataset for MapOp<D, F>
where
    D: ParallelDataset,
    F: (Fn(D::Item) -> R) + Sync + Send,
    R: Send,
{
}

impl<D, F, PI> IntoParallelIterator for FlatMapOp<D, F>
where
    D: ParallelDataset,
    F: (Fn(D::Item) -> PI) + Sync + Send,
    PI: IntoParallelIterator,
{
    type Iter = rayon::iter::FlatMap<D::Iter, F>;
    type Item = PI::Item;

    fn into_par_iter(self) -> Self::Iter {
        self.base.into_par_iter().flat_map(self.op)
    }
}

impl<D, F, PI> ParallelDataset for FlatMapOp<D, F>
where
    D: ParallelDataset,
    F: (Fn(D::Item) -> PI) + Sync + Send,
    PI: IntoParallelIterator,
{
}