pub struct SlowFileSystem { /* private fields */ }Expand description
Slow filesystem wrapper for testing
Wraps any FileSystem implementation and adds configurable delays to each operation. Also tracks metrics about operation counts.
Implementations§
Source§impl SlowFileSystem
impl SlowFileSystem
Sourcepub fn new(inner: Arc<dyn FileSystem>, config: SlowFsConfig) -> Self
pub fn new(inner: Arc<dyn FileSystem>, config: SlowFsConfig) -> Self
Create a new slow filesystem wrapper
Sourcepub fn with_uniform_delay(inner: Arc<dyn FileSystem>, delay: Duration) -> Self
pub fn with_uniform_delay(inner: Arc<dyn FileSystem>, delay: Duration) -> Self
Create with uniform delay for all operations
Sourcepub fn metrics(&self) -> &Arc<BackendMetrics>
pub fn metrics(&self) -> &Arc<BackendMetrics>
Get a reference to the metrics
Sourcepub fn reset_metrics(&self)
pub fn reset_metrics(&self)
Reset metrics to zero
Trait Implementations§
Source§impl FileSystem for SlowFileSystem
impl FileSystem for SlowFileSystem
Source§fn read_range(&self, path: &Path, offset: u64, len: usize) -> Result<Vec<u8>>
fn read_range(&self, path: &Path, offset: u64, len: usize) -> Result<Vec<u8>>
Read a range of bytes from a file (for lazy loading large files)
Source§fn write_file(&self, path: &Path, data: &[u8]) -> Result<()>
fn write_file(&self, path: &Path, data: &[u8]) -> Result<()>
Write data to file atomically (temp file + rename)
Source§fn create_file(&self, path: &Path) -> Result<Box<dyn FileWriter>>
fn create_file(&self, path: &Path) -> Result<Box<dyn FileWriter>>
Create a file for writing, returns a writer handle
Source§fn open_file(&self, path: &Path) -> Result<Box<dyn FileReader>>
fn open_file(&self, path: &Path) -> Result<Box<dyn FileReader>>
Open a file for reading, returns a reader handle
Source§fn open_file_for_write(&self, path: &Path) -> Result<Box<dyn FileWriter>>
fn open_file_for_write(&self, path: &Path) -> Result<Box<dyn FileWriter>>
Open a file for writing in-place (truncating, preserves ownership on Unix)
Source§fn open_file_for_append(&self, path: &Path) -> Result<Box<dyn FileWriter>>
fn open_file_for_append(&self, path: &Path) -> Result<Box<dyn FileWriter>>
Open a file for appending (creates if doesn’t exist)
Source§fn set_file_length(&self, path: &Path, len: u64) -> Result<()>
fn set_file_length(&self, path: &Path, len: u64) -> Result<()>
Set file length (truncate or extend with zeros)
Source§fn rename(&self, from: &Path, to: &Path) -> Result<()>
fn rename(&self, from: &Path, to: &Path) -> Result<()>
Rename/move a file or directory atomically
Source§fn copy(&self, from: &Path, to: &Path) -> Result<u64>
fn copy(&self, from: &Path, to: &Path) -> Result<u64>
Copy a file (fallback when rename fails across filesystems)
Source§fn symlink_metadata(&self, path: &Path) -> Result<FileMetadata>
fn symlink_metadata(&self, path: &Path) -> Result<FileMetadata>
Get symlink metadata (doesn’t follow symlinks)
Source§fn set_permissions(
&self,
path: &Path,
permissions: &FilePermissions,
) -> Result<()>
fn set_permissions( &self, path: &Path, permissions: &FilePermissions, ) -> Result<()>
Set file permissions
Source§fn read_dir(&self, path: &Path) -> Result<Vec<DirEntry>>
fn read_dir(&self, path: &Path) -> Result<Vec<DirEntry>>
List entries in a directory (non-recursive)
Source§fn create_dir_all(&self, path: &Path) -> Result<()>
fn create_dir_all(&self, path: &Path) -> Result<()>
Create a directory and all parent directories
Source§fn canonicalize(&self, path: &Path) -> Result<PathBuf>
fn canonicalize(&self, path: &Path) -> Result<PathBuf>
Get canonical (absolute, normalized) path
Source§fn current_uid(&self) -> u32
fn current_uid(&self) -> u32
Get the current user’s UID (Unix only, returns 0 on other platforms)
Source§fn sudo_write(
&self,
path: &Path,
data: &[u8],
mode: u32,
uid: u32,
gid: u32,
) -> Result<()>
fn sudo_write( &self, path: &Path, data: &[u8], mode: u32, uid: u32, gid: u32, ) -> Result<()>
Write file using sudo (for root-owned files). Read more
Source§fn search_file(
&self,
path: &Path,
pattern: &str,
opts: &FileSearchOptions,
cursor: &mut FileSearchCursor,
) -> Result<Vec<SearchMatch>>
fn search_file( &self, path: &Path, pattern: &str, opts: &FileSearchOptions, cursor: &mut FileSearchCursor, ) -> Result<Vec<SearchMatch>>
Search a file on disk for a pattern, returning one batch of matches. Read more
Source§fn count_line_feeds_in_range(
&self,
path: &Path,
offset: u64,
len: usize,
) -> Result<usize>
fn count_line_feeds_in_range( &self, path: &Path, offset: u64, len: usize, ) -> Result<usize>
Count
\n bytes in a file range without returning the data. Read moreSource§fn write_patched(
&self,
src_path: &Path,
dst_path: &Path,
ops: &[WriteOp<'_>],
) -> Result<()>
fn write_patched( &self, src_path: &Path, dst_path: &Path, ops: &[WriteOp<'_>], ) -> Result<()>
Write a file using a patch recipe (optimized for remote filesystems). Read more
Source§fn metadata_if_exists(&self, path: &Path) -> Option<FileMetadata>
fn metadata_if_exists(&self, path: &Path) -> Option<FileMetadata>
Check if path exists, returns metadata if it does
Source§fn is_writable(&self, path: &Path) -> bool
fn is_writable(&self, path: &Path) -> bool
Check if the current user has write permission to the given path. Read more
Source§fn temp_path_for(&self, path: &Path) -> PathBuf
fn temp_path_for(&self, path: &Path) -> PathBuf
Get a temporary file path for atomic writes
Source§fn unique_temp_path(&self, dest_path: &Path) -> PathBuf
fn unique_temp_path(&self, dest_path: &Path) -> PathBuf
Get a unique temporary file path (using timestamp and PID)
Source§fn remote_connection_info(&self) -> Option<&str>
fn remote_connection_info(&self) -> Option<&str>
Get remote connection info if this is a remote filesystem Read more
Source§fn is_remote_connected(&self) -> bool
fn is_remote_connected(&self) -> bool
Check if a remote filesystem is currently connected. Read more
Auto Trait Implementations§
impl Freeze for SlowFileSystem
impl !RefUnwindSafe for SlowFileSystem
impl Send for SlowFileSystem
impl Sync for SlowFileSystem
impl Unpin for SlowFileSystem
impl UnsafeUnpin for SlowFileSystem
impl !UnwindSafe for SlowFileSystem
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FileSystemExt for Twhere
T: FileSystem,
impl<T> FileSystemExt for Twhere
T: FileSystem,
Source§fn read_file_async(
&self,
path: &Path,
) -> impl Future<Output = Result<Vec<u8>>> + Send
fn read_file_async( &self, path: &Path, ) -> impl Future<Output = Result<Vec<u8>>> + Send
Async version of read_file
Source§fn read_range_async(
&self,
path: &Path,
offset: u64,
len: usize,
) -> impl Future<Output = Result<Vec<u8>>> + Send
fn read_range_async( &self, path: &Path, offset: u64, len: usize, ) -> impl Future<Output = Result<Vec<u8>>> + Send
Async version of read_range
Source§fn count_line_feeds_in_range_async(
&self,
path: &Path,
offset: u64,
len: usize,
) -> impl Future<Output = Result<usize>> + Send
fn count_line_feeds_in_range_async( &self, path: &Path, offset: u64, len: usize, ) -> impl Future<Output = Result<usize>> + Send
Async version of count_line_feeds_in_range
Source§fn write_file_async(
&self,
path: &Path,
data: &[u8],
) -> impl Future<Output = Result<()>> + Send
fn write_file_async( &self, path: &Path, data: &[u8], ) -> impl Future<Output = Result<()>> + Send
Async version of write_file
Source§fn metadata_async(
&self,
path: &Path,
) -> impl Future<Output = Result<FileMetadata>> + Send
fn metadata_async( &self, path: &Path, ) -> impl Future<Output = Result<FileMetadata>> + Send
Async version of metadata
Source§fn exists_async(&self, path: &Path) -> impl Future<Output = bool> + Send
fn exists_async(&self, path: &Path) -> impl Future<Output = bool> + Send
Async version of exists
Source§fn is_dir_async(&self, path: &Path) -> impl Future<Output = Result<bool>> + Send
fn is_dir_async(&self, path: &Path) -> impl Future<Output = Result<bool>> + Send
Async version of is_dir
Source§fn is_file_async(
&self,
path: &Path,
) -> impl Future<Output = Result<bool>> + Send
fn is_file_async( &self, path: &Path, ) -> impl Future<Output = Result<bool>> + Send
Async version of is_file
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Set the foreground color generically Read more
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Set the background color generically. Read more
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Change the foreground color to black
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Change the background color to black
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Change the foreground color to red
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Change the background color to red
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Change the foreground color to green
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Change the background color to green
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Change the foreground color to yellow
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Change the background color to yellow
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Change the foreground color to blue
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Change the background color to blue
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Change the foreground color to magenta
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Change the background color to magenta
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Change the foreground color to purple
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Change the background color to purple
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Change the foreground color to cyan
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Change the background color to cyan
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Change the foreground color to white
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Change the background color to white
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Change the foreground color to the terminal default
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Change the background color to the terminal default
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Change the foreground color to bright black
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Change the background color to bright black
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Change the foreground color to bright red
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Change the background color to bright red
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Change the foreground color to bright green
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Change the background color to bright green
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Change the foreground color to bright yellow
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Change the background color to bright yellow
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Change the foreground color to bright blue
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Change the background color to bright blue
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Change the foreground color to bright magenta
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Change the background color to bright magenta
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Change the foreground color to bright purple
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Change the background color to bright purple
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Change the foreground color to bright cyan
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Change the background color to bright cyan
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Change the foreground color to bright white
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Change the background color to bright white
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Make the text bold
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Make the text dim
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Make the text italicized
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Make the text underlined
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Make the text blink
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Make the text blink (but fast!)
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Swap the foreground and background colors
Hide the text
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Cross out the text
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
Set the foreground color at runtime. Only use if you do not know which color will be used at
compile-time. If the color is constant, use either
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
Set the background color at runtime. Only use if you do not know what color to use at
compile-time. If the color is constant, use either
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read moreSource§fn fg_rgb<const R: u8, const G: u8, const B: u8>(
&self,
) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>
fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>
Set the foreground color to a specific RGB value.
Source§fn bg_rgb<const R: u8, const G: u8, const B: u8>(
&self,
) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>
fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>
Set the background color to a specific RGB value.
Source§fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>
fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>
Sets the foreground color to an RGB value.
Source§fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>
fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>
Sets the background color to an RGB value.