44#[ cfg( not( feature = "branch_factor_256" ) ) ]
55use crate :: PackedPathRef ;
66use crate :: {
7- Children , HashType , Hashable , HashableShunt , HashedTrieNode , PathBuf , PathComponent , PathGuard ,
8- SplitPath , TrieNode , TriePath , TriePathFromPackedBytes , ValueDigest ,
7+ Children , HashType , Hashable , HashableShunt , HashedTrieNode , JoinedPath , PathBuf ,
8+ PathComponent , PathGuard , SplitPath , TrieNode , TriePath , TriePathFromPackedBytes , ValueDigest ,
99} ;
1010
1111#[ cfg( feature = "branch_factor_256" ) ]
@@ -280,7 +280,12 @@ impl<'a, T: AsRef<[u8]> + ?Sized> HashedKeyValueTrieRoot<'a, T> {
280280}
281281
282282impl < T : AsRef < [ u8 ] > + ?Sized > TrieNode < T > for KeyValueTrieRoot < ' _ , T > {
283- fn partial_path ( & self ) -> impl SplitPath + ' _ {
283+ type PartialPath < ' a >
284+ = PackedPathRef < ' a >
285+ where
286+ Self : ' a ;
287+
288+ fn partial_path ( & self ) -> Self :: PartialPath < ' _ > {
284289 self . partial_path
285290 }
286291
@@ -305,7 +310,12 @@ impl<T: AsRef<[u8]> + ?Sized> TrieNode<T> for KeyValueTrieRoot<'_, T> {
305310}
306311
307312impl < T : AsRef < [ u8 ] > + ?Sized > TrieNode < T > for HashedKeyValueTrieRoot < ' _ , T > {
308- fn partial_path ( & self ) -> impl SplitPath + ' _ {
313+ type PartialPath < ' a >
314+ = PackedPathRef < ' a >
315+ where
316+ Self : ' a ;
317+
318+ fn partial_path ( & self ) -> Self :: PartialPath < ' _ > {
309319 self . partial_path
310320 }
311321
@@ -334,15 +344,34 @@ impl<T: AsRef<[u8]> + ?Sized> HashedTrieNode<T> for HashedKeyValueTrieRoot<'_, T
334344 }
335345}
336346
337- impl < T : AsRef < [ u8 ] > + ?Sized > Hashable for HashedKeyValueTrieRoot < ' _ , T > {
338- fn parent_prefix_path ( & self ) -> impl crate :: IntoSplitPath + ' _ {
339- self . leading_path . as_slice ( )
347+ impl < ' a , T : AsRef < [ u8 ] > + ?Sized > Hashable for HashedKeyValueTrieRoot < ' a , T > {
348+ type LeadingPath < ' b >
349+ = & ' b [ PathComponent ]
350+ where
351+ Self : ' b ;
352+
353+ type PartialPath < ' b >
354+ = PackedPathRef < ' a >
355+ where
356+ Self : ' b ;
357+
358+ type FullPath < ' b >
359+ = JoinedPath < & ' b [ PathComponent ] , PackedPathRef < ' a > >
360+ where
361+ Self : ' b ;
362+
363+ fn parent_prefix_path ( & self ) -> Self :: LeadingPath < ' _ > {
364+ & self . leading_path
340365 }
341366
342- fn partial_path ( & self ) -> impl crate :: IntoSplitPath + ' _ {
367+ fn partial_path ( & self ) -> Self :: PartialPath < ' _ > {
343368 self . partial_path
344369 }
345370
371+ fn full_path ( & self ) -> Self :: FullPath < ' _ > {
372+ self . parent_prefix_path ( ) . append ( self . partial_path )
373+ }
374+
346375 fn value_digest ( & self ) -> Option < ValueDigest < & [ u8 ] > > {
347376 self . value . map ( |v| ValueDigest :: Value ( v. as_ref ( ) ) )
348377 }
0 commit comments