Instead of having an inherent implementation for struct Dir, create a Directory trait for it. This is needed for when we add the LookupDir struct.
Signed-off-by: Timur Tabi <[email protected]> --- rust/kernel/debugfs.rs | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/rust/kernel/debugfs.rs b/rust/kernel/debugfs.rs index facad81e8290..ed740eb90fc9 100644 --- a/rust/kernel/debugfs.rs +++ b/rust/kernel/debugfs.rs @@ -35,6 +35,18 @@ #[cfg(CONFIG_DEBUG_FS)] use entry::Entry; +/// Trait for DebugFS directory operations. +/// +/// This trait abstracts the core operations that can be performed on a DebugFS directory, +/// allowing for alternative implementations (e.g., for testing). +pub trait Directory: Clone + Sized { + /// Create a new directory at the DebugFS root. + fn new(name: &CStr) -> Self; + + /// Creates a subdirectory within this directory. + fn subdir(&self, name: &CStr) -> Self; +} + /// Owning handle to a DebugFS directory. /// /// The directory in the filesystem represented by [`Dir`] will be removed when handle has been @@ -96,7 +108,9 @@ fn create_file<'a, T, E: 'a>( } ? E } } +} +impl Directory for Dir { /// Create a new directory in DebugFS at the root. /// /// # Examples @@ -106,7 +120,7 @@ fn create_file<'a, T, E: 'a>( /// # use kernel::debugfs::Dir; /// let debugfs = Dir::new(c_str!("parent")); /// ``` - pub fn new(name: &CStr) -> Self { + fn new(name: &CStr) -> Self { Dir::create(name, None) } @@ -120,9 +134,12 @@ pub fn new(name: &CStr) -> Self { /// let parent = Dir::new(c_str!("parent")); /// let child = parent.subdir(c_str!("child")); /// ``` - pub fn subdir(&self, name: &CStr) -> Self { + fn subdir(&self, name: &CStr) -> Self { Dir::create(name, Some(self)) } +} + +impl Dir { /// Creates a read-only file in this directory. /// -- 2.52.0
