Trait FileSystemOperations

Source
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§

Source

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.

Source

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.

Source

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

Source

fn remove( &self, parent_node: &Arc<dyn VfsNode>, name: &String, ) -> Result<(), FileSystemError>

Remove a file from the specified directory

Source

fn readdir( &self, node: &Arc<dyn VfsNode>, ) -> Result<Vec<DirectoryEntryInternal>, FileSystemError>

Read directory entries from a directory node

Source

fn root_node(&self) -> Arc<dyn VfsNode>

Get the root VfsNode for this filesystem

Source

fn name(&self) -> &str

Get filesystem name

Provided Methods§

Source

fn is_read_only(&self) -> bool

Check if filesystem is read-only

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 created
  • link_name - Name for the new hard link
  • target_node - Existing file to link to
§Returns

Returns the VfsNode representing the new hard link on success

§Errors
  • NotSupported - Filesystem doesn’t support hard links
  • InvalidOperation - Target is a directory (most filesystems don’t support directory hard links)
  • CrossDevice - Target and link are on different filesystems
  • FileExists - Link name already exists in parent directory

Trait Implementations§

Source§

impl Debug for dyn FileSystemOperations

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Implementors§