pub struct FsLimits {
pub max_total_bytes: u64,
pub max_file_size: u64,
pub max_file_count: u64,
pub max_path_depth: usize,
pub max_filename_length: usize,
pub max_path_length: usize,
}Expand description
Filesystem resource limits.
Controls maximum resource consumption for in-memory filesystems.
Applied to both InMemoryFs and OverlayFs.
§Example
use bashkit::{Bash, FsLimits, InMemoryFs};
use std::sync::Arc;
// Create filesystem with custom limits
let limits = FsLimits::new()
.max_total_bytes(50_000_000) // 50MB total
.max_file_size(5_000_000) // 5MB per file
.max_file_count(1000); // 1000 files max
let fs = Arc::new(InMemoryFs::with_limits(limits));
let bash = Bash::builder().fs(fs).build();§Default Limits
| Limit | Default | Purpose |
|---|---|---|
max_total_bytes | 100MB | Total filesystem memory |
max_file_size | 10MB | Single file size |
max_file_count | 10,000 | Number of files |
max_path_depth | 100 | Directory nesting depth |
max_filename_length | 255 | Single path component |
max_path_length | 4096 | Total path length |
Fields§
§max_total_bytes: u64Maximum total bytes across all files. Default: 100MB (100,000,000 bytes)
max_file_size: u64Maximum size of a single file in bytes. Default: 10MB (10,000,000 bytes)
max_file_count: u64Maximum number of files (not including directories). Default: 10,000
max_path_depth: usizeMaximum directory nesting depth. Default: 100
max_filename_length: usizeMaximum length of a single filename (path component) in bytes. Default: 255 bytes
max_path_length: usizeMaximum total path length in bytes. Default: 4096 bytes
Implementations§
Source§impl FsLimits
impl FsLimits
Sourcepub fn new() -> Self
pub fn new() -> Self
Create new limits with defaults.
§Example
use bashkit::FsLimits;
let limits = FsLimits::new();
assert_eq!(limits.max_total_bytes, 100_000_000);Sourcepub fn max_total_bytes(self, bytes: u64) -> Self
pub fn max_total_bytes(self, bytes: u64) -> Self
Set maximum total filesystem size.
§Example
use bashkit::FsLimits;
let limits = FsLimits::new().max_total_bytes(50_000_000); // 50MBSourcepub fn max_file_size(self, bytes: u64) -> Self
pub fn max_file_size(self, bytes: u64) -> Self
Set maximum single file size.
§Example
use bashkit::FsLimits;
let limits = FsLimits::new().max_file_size(1_000_000); // 1MBSourcepub fn max_file_count(self, count: u64) -> Self
pub fn max_file_count(self, count: u64) -> Self
Set maximum file count.
§Example
use bashkit::FsLimits;
let limits = FsLimits::new().max_file_count(100);Sourcepub fn max_path_depth(self, depth: usize) -> Self
pub fn max_path_depth(self, depth: usize) -> Self
Set maximum path depth (directory nesting).
Sourcepub fn max_filename_length(self, len: usize) -> Self
pub fn max_filename_length(self, len: usize) -> Self
Set maximum filename (single component) length.
Sourcepub fn max_path_length(self, len: usize) -> Self
pub fn max_path_length(self, len: usize) -> Self
Set maximum total path length.
Sourcepub fn validate_path(&self, path: &Path) -> Result<(), FsLimitExceeded>
pub fn validate_path(&self, path: &Path) -> Result<(), FsLimitExceeded>
Validate a path against depth, length, and character safety limits.
Returns Err(FsLimitExceeded) if the path violates any limit.
Sourcepub fn check_total_bytes(
&self,
current: u64,
additional: u64,
) -> Result<(), FsLimitExceeded>
pub fn check_total_bytes( &self, current: u64, additional: u64, ) -> Result<(), FsLimitExceeded>
Check if adding bytes would exceed total limit.
Returns Ok(()) if within limits, Err(FsLimitExceeded) otherwise.
Sourcepub fn check_file_size(&self, size: u64) -> Result<(), FsLimitExceeded>
pub fn check_file_size(&self, size: u64) -> Result<(), FsLimitExceeded>
Check if a file size exceeds the limit.
Sourcepub fn check_file_count(&self, current: u64) -> Result<(), FsLimitExceeded>
pub fn check_file_count(&self, current: u64) -> Result<(), FsLimitExceeded>
Check if adding a file would exceed the count limit.