@@ -7,18 +7,20 @@ use rayon::prelude::*;
77
88/// Collection of functions and starting points in order to build a [`DataTree`] with [`From`] or [`Into`].
99#[ derive( Debug ) ]
10- pub struct TreeBuilder < Path , Name , Size , GetInfo , JoinPath >
10+ pub struct TreeBuilder < Path , NameIter , Size , GetInfo , JoinPath >
1111where
1212 Path : Send + Sync ,
13- Name : Send + Sync ,
14- GetInfo : Fn ( & Path ) -> Info < Name , Size > + Copy + Send + Sync ,
15- JoinPath : Fn ( & Path , & Name ) -> Path + Copy + Send + Sync ,
13+ NameIter : IntoIterator ,
14+ NameIter :: IntoIter : Send ,
15+ NameIter :: Item : Send ,
16+ GetInfo : Fn ( & Path ) -> Info < NameIter , Size > + Copy + Send + Sync ,
17+ JoinPath : Fn ( & Path , & NameIter :: Item ) -> Path + Copy + Send + Sync ,
1618 Size : size:: Size + Send ,
1719{
1820 /// Path to the root.
1921 pub path : Path ,
2022 /// Name of the root.
21- pub name : Name ,
23+ pub name : NameIter :: Item ,
2224 /// Function to extract necessary information from `path` (`size` and `children`).
2325 pub get_info : GetInfo ,
2426 /// Function to join parent's `path` with a child's name to make the child's `name`.
@@ -27,17 +29,19 @@ where
2729 pub max_depth : u64 ,
2830}
2931
30- impl < Path , Name , Size , GetInfo , JoinPath > From < TreeBuilder < Path , Name , Size , GetInfo , JoinPath > >
31- for DataTree < Name , Size >
32+ impl < Path , NameIter , Size , GetInfo , JoinPath >
33+ From < TreeBuilder < Path , NameIter , Size , GetInfo , JoinPath > > for DataTree < NameIter :: Item , Size >
3234where
3335 Path : Send + Sync ,
34- Name : Send + Sync ,
35- GetInfo : Fn ( & Path ) -> Info < Name , Size > + Copy + Send + Sync ,
36- JoinPath : Fn ( & Path , & Name ) -> Path + Copy + Send + Sync ,
36+ NameIter : IntoIterator ,
37+ NameIter :: IntoIter : Send ,
38+ NameIter :: Item : Send ,
39+ GetInfo : Fn ( & Path ) -> Info < NameIter , Size > + Copy + Send + Sync ,
40+ JoinPath : Fn ( & Path , & NameIter :: Item ) -> Path + Copy + Send + Sync ,
3741 Size : size:: Size + Send ,
3842{
3943 /// Create a [`DataTree`] from a [`TreeBuilder`].
40- fn from ( builder : TreeBuilder < Path , Name , Size , GetInfo , JoinPath > ) -> Self {
44+ fn from ( builder : TreeBuilder < Path , NameIter , Size , GetInfo , JoinPath > ) -> Self {
4145 let TreeBuilder {
4246 path,
4347 name,
5054 let max_depth = max_depth. saturating_sub ( 1 ) ;
5155
5256 let children = children
53- . into_par_iter ( )
57+ . into_iter ( )
58+ . par_bridge ( )
5459 . map ( |name| TreeBuilder {
5560 path : join_path ( & path, & name) ,
5661 name,
0 commit comments