1- use crate :: size;
1+ use crate :: { hardlink :: LinkPathList , size} ;
22use dashmap:: { iter:: Iter as DashIter , mapref:: multiple:: RefMulti , DashMap } ;
33use derive_more:: { Display , Error } ;
44use pipe_trait:: Pipe ;
5- use std:: {
6- fmt:: Debug ,
7- path:: { Path , PathBuf } ,
8- } ;
5+ use std:: { fmt:: Debug , path:: Path } ;
96
107/// Storage to be used by [`crate::hook::RecordHardLink`].
118#[ derive( Debug , Clone ) ]
129pub struct RecordHardLinkStorage < Size > (
1310 /// Map an inode number to its size and detected paths.
14- DashMap < u64 , ( Size , Vec < PathBuf > ) > , // TODO: benchmark against Mutex<HashMap<u64, (Size, Vec<PathBuf> )>>
11+ DashMap < u64 , ( Size , LinkPathList ) > , // TODO: benchmark against Mutex<HashMap<u64, (Size, LinkPathList )>>
1512) ;
1613
1714impl < Size > RecordHardLinkStorage < Size > {
6259 . and_modify ( |( recorded, paths) | {
6360 let ( detected, recorded) = ( size, * recorded) ;
6461 if size == recorded {
65- paths. push ( path. to_path_buf ( ) ) ;
62+ paths. add ( path. to_path_buf ( ) ) ;
6663 } else {
6764 size_assertion = Err ( SizeConflictError {
6865 ino,
7168 } ) ;
7269 }
7370 } )
74- . or_insert_with ( || ( size, vec ! [ path. to_path_buf( ) ] ) ) ;
71+ . or_insert_with ( || ( size, path. to_path_buf ( ) . pipe ( LinkPathList :: single ) ) ) ;
7572 size_assertion. map_err ( AddError :: SizeConflict )
7673 }
7774}
@@ -80,13 +77,13 @@ where
8077#[ derive( derive_more:: Debug ) ]
8178#[ debug( bound( ) ) ]
8279#[ debug( "Iter(..)" ) ]
83- pub struct Iter < ' a , Size > ( DashIter < ' a , u64 , ( Size , Vec < PathBuf > ) > ) ;
80+ pub struct Iter < ' a , Size > ( DashIter < ' a , u64 , ( Size , LinkPathList ) > ) ;
8481
8582/// [Item](Iterator::Item) of [`Iter`].
8683#[ derive( derive_more:: Debug ) ]
8784#[ debug( bound( ) ) ]
8885#[ debug( "IterItem(..)" ) ]
89- pub struct IterItem < ' a , Size > ( RefMulti < ' a , u64 , ( Size , Vec < PathBuf > ) > ) ;
86+ pub struct IterItem < ' a , Size > ( RefMulti < ' a , u64 , ( Size , LinkPathList ) > ) ;
9087
9188impl < ' a , Size > Iterator for Iter < ' a , Size > {
9289 type Item = IterItem < ' a , Size > ;
@@ -107,7 +104,7 @@ impl<'a, Size> IterItem<'a, Size> {
107104 }
108105
109106 /// Links of the inode.
110- pub fn links ( & self ) -> & [ PathBuf ] {
107+ pub fn links ( & self ) -> & LinkPathList {
111108 & self . 0 . value ( ) . 1
112109 }
113110}
0 commit comments