FileSystem

Struct FileSystem 

Source
pub struct FileSystem { /* private fields */ }
Expand description

Main filesystem interface for Heroforge repositories

This provides a filesystem-like API over the Heroforge repository storage. All operations are atomic and maintain version history.

§Thread Safety

FileSystem is thread-safe. Multiple threads can read simultaneously, but writes are serialized through an internal mutex.

§Example

use heroforge_core::Repository;
use heroforge_core::fs::FileSystem;
use std::sync::Arc;

fn main() -> heroforge_core::Result<()> {
    let repo = Arc::new(Repository::open_rw("project.forge")?);
    let fs = FileSystem::new(repo);

    // Read without commit
    let exists = fs.exists("README.md")?;
    if !exists {
        // Write with auto-commit
        fs.write_file("README.md", b"# My Project", "admin", "Initialize README")?;
    }

    Ok(())
}

Implementations§

Source§

impl FileSystem

Source

pub fn new(repo: Arc<Repository>) -> Self

Create a new filesystem interface for a repository

Source

pub fn status(&self) -> FileSystemStatus

Get current status

Source

pub fn exists(&self, path: &str) -> FsResult<bool>

Check if a path exists

§Arguments
  • path - Path to check (relative to repository root)
§Returns

true if path exists, false otherwise

Source

pub fn is_dir(&self, path: &str) -> FsResult<bool>

Check if path is a directory

Source

pub fn is_file(&self, path: &str) -> FsResult<bool>

Check if path is a file

Source

pub fn stat(&self, path: &str) -> FsResult<FileMetadata>

Get file metadata

§Arguments
  • path - Path to file/directory
§Returns

File metadata including size, permissions, etc.

Source

pub fn read_file(&self, path: &str) -> FsResult<Vec<u8>>

Read file content as bytes

§Arguments
  • path - Path to file
§Returns

File content as Vec<u8>

Source

pub fn read_file_string(&self, path: &str) -> FsResult<String>

Read file content as string

§Arguments
  • path - Path to file
§Returns

File content as String

Source

pub fn list_dir(&self, path: &str) -> FsResult<Vec<DirectoryEntry>>

List directory contents

§Arguments
  • path - Directory path
§Returns

Vector of directory entries

Source

pub fn write_file( &self, path: &str, content: &[u8], author: &str, message: &str, ) -> FsResult<String>

Write file content (creates or overwrites)

§Arguments
  • path - Path to file
  • content - File content
  • author - Author name
  • message - Commit message
§Returns

Commit hash of the change

Source

pub fn copy_file( &self, src: &str, dst: &str, author: &str, message: &str, ) -> FsResult<String>

Copy a file

Source

pub fn copy_dir( &self, src: &str, dst: &str, author: &str, message: &str, ) -> FsResult<String>

Copy a directory recursively

Source

pub fn move_file( &self, src: &str, dst: &str, author: &str, message: &str, ) -> FsResult<String>

Move/rename a file

Source

pub fn move_dir( &self, src: &str, dst: &str, author: &str, message: &str, ) -> FsResult<String>

Move/rename a directory

Source

pub fn delete_file( &self, path: &str, author: &str, message: &str, ) -> FsResult<String>

Delete a file

Source

pub fn delete_dir( &self, path: &str, author: &str, message: &str, ) -> FsResult<String>

Delete a directory recursively

Source

pub fn chmod( &self, path: &str, permissions: FilePermissions, author: &str, message: &str, ) -> FsResult<String>

Change file permissions

Source

pub fn chmod_recursive( &self, path: &str, permissions: FilePermissions, author: &str, message: &str, ) -> FsResult<String>

Change permissions recursively

Source

pub fn make_executable( &self, path: &str, author: &str, message: &str, ) -> FsResult<String>

Make file executable

Create a symbolic link

Source

pub fn find(&self, pattern: &str) -> FsResult<FindResults>

Find files matching a glob pattern

§Arguments
  • pattern - Glob pattern (e.g., “**/*.rs”)
§Returns

List of matching file paths

Source

pub fn disk_usage(&self, path: &str) -> FsResult<u64>

Calculate disk usage of a path

§Arguments
  • path - Path to directory or file
§Returns

Total size in bytes

Source

pub fn count_files(&self, pattern: &str) -> FsResult<usize>

Count files matching a pattern

§Arguments
  • pattern - Glob pattern
§Returns

Number of matching files

Source

pub fn begin_transaction(&self) -> FsResult<Transaction>

Begin a transaction for batch operations

§Returns

A transaction that can be used to group multiple operations

Source

pub fn end_transaction(&self) -> FsResult<()>

End the active transaction

Source

pub fn has_active_transaction(&self) -> bool

Check if a transaction is active

Source

pub fn active_transaction(&self) -> Option<Transaction>

Get the active transaction (if any)

Trait Implementations§

Source§

impl Clone for FileSystem

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CloneToUninit for T
where T: Clone,

§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.