diff --git a/btrfs/src/v2/tree.rs b/btrfs/src/v2/tree.rs index d901a88..b87cc66 100644 --- a/btrfs/src/v2/tree.rs +++ b/btrfs/src/v2/tree.rs @@ -1,5 +1,6 @@ use core::cell::Cell; use core::fmt::Display; +use core::marker::PhantomData; use core::mem::size_of; use core::ops::Deref; @@ -166,10 +167,11 @@ impl Display for NodeHandle { } #[derive(Debug)] -pub struct Range { +pub struct Range<'tree, R: super::Read> { volume: Rc>, pub(crate) start: RootOrEdge, pub(crate) end: RootOrEdge, + phantom: PhantomData<&'tree ()>, } #[derive(Derivative)] @@ -282,7 +284,7 @@ impl Tree { )) } - pub fn iter(&self) -> Range { + pub fn iter(&self) -> Range<'_, R> { Range::new(self.volume.clone(), self.root.clone(), self.root.clone()) } } @@ -572,7 +574,7 @@ impl Node { } } -impl Range +impl<'tree, R> Range<'tree, R> where R: super::Read, { @@ -581,6 +583,7 @@ where volume, start: RootOrEdge::Root(start), end: RootOrEdge::Root(end), + phantom: PhantomData, } } @@ -593,7 +596,7 @@ where } } -impl Iterator for Range +impl<'tree, R> Iterator for Range<'tree, R> where R: super::Read, { @@ -620,7 +623,7 @@ where } } -impl DoubleEndedIterator for Range +impl<'tree, R> DoubleEndedIterator for Range<'tree, R> where R: super::Read, { diff --git a/btrfs/src/v2/volume.rs b/btrfs/src/v2/volume.rs index 182a67d..b904929 100644 --- a/btrfs/src/v2/volume.rs +++ b/btrfs/src/v2/volume.rs @@ -371,15 +371,13 @@ impl Fs { } } - pub fn get_inode_children_inodes<'a>( + pub fn get_inode_children_inodes( &self, - inode: &'a INode, - ) -> Result + 'a> - where - R: 'a, - { - self.get_inode_children(inode).map(|children| { - children.map(|child| { + inode: &INode, + ) -> Result + '_> { + let inode = inode.clone(); + self.get_inode_children(&inode).map(|children| { + children.map(move |child| { let id: u64 = child.item().location.id().into(); inode.clone().into_child(id, child.into_name()) @@ -387,7 +385,10 @@ impl Fs { }) } - pub fn get_inode_children(&self, inode: &INode) -> Result> { + pub fn get_inode_children( + &self, + inode: &INode, + ) -> Result + '_> { let key = PartialKey::new(Some(inode.id()), Some(ObjectType::DirIndex), None); let children = self.fs_root.find_range(&key)?;