pub trait FileSystemOperations: Send + Sync {
// Required methods
fn lookup(
&self,
parent_node: &Arc<dyn VfsNode>,
name: &String,
) -> Result<Arc<dyn VfsNode>, FileSystemError>;
fn open(
&self,
node: &Arc<dyn VfsNode>,
flags: u32,
) -> Result<Arc<dyn FileObject>, FileSystemError>;
fn create(
&self,
parent_node: &Arc<dyn VfsNode>,
name: &String,
file_type: FileType,
mode: u32,
) -> Result<Arc<dyn VfsNode>, FileSystemError>;
fn remove(
&self,
parent_node: &Arc<dyn VfsNode>,
name: &String,
) -> Result<(), FileSystemError>;
fn readdir(
&self,
node: &Arc<dyn VfsNode>,
) -> Result<Vec<DirectoryEntryInternal>, FileSystemError>;
fn root_node(&self) -> Arc<dyn VfsNode>;
fn name(&self) -> &str;
// Provided methods
fn is_read_only(&self) -> bool { ... }
fn create_hardlink(
&self,
link_parent: &Arc<dyn VfsNode>,
link_name: &String,
target_node: &Arc<dyn VfsNode>,
) -> Result<Arc<dyn VfsNode>, FileSystemError> { ... }
}
Expand description
FileSystemOperations trait defines the driver API for filesystem operations
This trait consolidates filesystem operations that were previously scattered across different interfaces. It provides a clean contract between VFS and filesystem drivers.
Required Methods§
Sourcefn lookup(
&self,
parent_node: &Arc<dyn VfsNode>,
name: &String,
) -> Result<Arc<dyn VfsNode>, FileSystemError>
fn lookup( &self, parent_node: &Arc<dyn VfsNode>, name: &String, ) -> Result<Arc<dyn VfsNode>, FileSystemError>
Look up a child node by name within a parent directory
This is the heart of the new driver API. It takes a parent directory’s VfsNode and a name, returning the child’s VfsNode.
Sourcefn open(
&self,
node: &Arc<dyn VfsNode>,
flags: u32,
) -> Result<Arc<dyn FileObject>, FileSystemError>
fn open( &self, node: &Arc<dyn VfsNode>, flags: u32, ) -> Result<Arc<dyn FileObject>, FileSystemError>
Open a file represented by a VfsNode
This method takes a VfsNode (file entity) and opens it, returning a stateful FileObject for read/write operations.
Sourcefn create(
&self,
parent_node: &Arc<dyn VfsNode>,
name: &String,
file_type: FileType,
mode: u32,
) -> Result<Arc<dyn VfsNode>, FileSystemError>
fn create( &self, parent_node: &Arc<dyn VfsNode>, name: &String, file_type: FileType, mode: u32, ) -> Result<Arc<dyn VfsNode>, FileSystemError>
Create a new file in the specified directory
Sourcefn remove(
&self,
parent_node: &Arc<dyn VfsNode>,
name: &String,
) -> Result<(), FileSystemError>
fn remove( &self, parent_node: &Arc<dyn VfsNode>, name: &String, ) -> Result<(), FileSystemError>
Remove a file from the specified directory
Sourcefn readdir(
&self,
node: &Arc<dyn VfsNode>,
) -> Result<Vec<DirectoryEntryInternal>, FileSystemError>
fn readdir( &self, node: &Arc<dyn VfsNode>, ) -> Result<Vec<DirectoryEntryInternal>, FileSystemError>
Read directory entries from a directory node
Provided Methods§
Sourcefn is_read_only(&self) -> bool
fn is_read_only(&self) -> bool
Check if filesystem is read-only
Sourcefn create_hardlink(
&self,
link_parent: &Arc<dyn VfsNode>,
link_name: &String,
target_node: &Arc<dyn VfsNode>,
) -> Result<Arc<dyn VfsNode>, FileSystemError>
fn create_hardlink( &self, link_parent: &Arc<dyn VfsNode>, link_name: &String, target_node: &Arc<dyn VfsNode>, ) -> Result<Arc<dyn VfsNode>, FileSystemError>
Create a hard link to an existing file
This method creates a hard link from link_name
in link_parent
to the existing
file represented by target_node
. Both the link and target will refer to the
same underlying file data.
§Arguments
link_parent
- Parent directory where the link will be createdlink_name
- Name for the new hard linktarget_node
- Existing file to link to
§Returns
Returns the VfsNode representing the new hard link on success
§Errors
NotSupported
- Filesystem doesn’t support hard linksInvalidOperation
- Target is a directory (most filesystems don’t support directory hard links)CrossDevice
- Target and link are on different filesystemsFileExists
- Link name already exists in parent directory