1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use specs::{ReadStorage, System, WriteStorage};
use crate::{MetadataComp, PathComp};

pub struct PathMetadataSystem;

impl<'a> System<'a> for PathMetadataSystem {
    type SystemData = (ReadStorage<'a, PathComp>, WriteStorage<'a, MetadataComp>);

    fn run(&mut self, data: Self::SystemData) {
        use rayon::prelude::*;
        use specs::ParJoin;

        let (paths, mut metadatas) = data;

        (&paths, &mut metadatas)
            .par_join()
            .for_each(|(path, metadata)| {
                metadata.set("path", path);
            });
    }
}