FileSystemOperations

Trait FileSystemOperations 

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

Source

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.

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

Source

fn as_any(&self) -> &dyn Any

Access to Any trait for downcasting

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§