pub trait FileSystemOperations: Send + Sync {
// Required methods
fn fs_id(&self) -> FileSystemId;
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;
fn as_any(&self) -> &dyn Any;
// 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 fs_id(&self) -> FileSystemId
fn fs_id(&self) -> FileSystemId
Get the unique filesystem identifier.
This ID is stable for the lifetime of the filesystem mount and is used in combination with file identifiers to create globally unique cache keys.
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