Crates.io | io-providers |
lib.rs | io-providers |
version | 0.2.0-beta.3 |
source | src |
created_at | 2015-09-23 16:54:14.438856 |
updated_at | 2018-09-23 23:01:02.68712 |
description | Enables dependency injection for many I/O operations |
homepage | |
repository | https://github.com/pshendry/io-providers |
max_upload_size | |
id | 3093 |
size | 63,859 |
Defines "provider" traits and implementations for different types of I/O operations, enabling dependency injection that's very helpful for testing.
A number of different I/O types are supported:
Env
StdStreams
Fs
In addition to "native" implementations for each trait, "simulated" implementations are also built-in:
SimulatedEnv
for faking process environment stateSimulatedStdStreams
for faking standard
stream input and inspecting outputTempFs
for performing filesystem access in a chroot
-like sandbox
isolated from the rest of the filesystemEach provider trait can be used independently, however there is also the all-encompassing
Io
which provides access to all of them. If you have a variety of I/O
dependencies, it might be easiest to create and pass around a single &mut Io
.
Cargo.toml
:
[dependencies]
io-providers = "0.2.0-beta.2"
src/main.rs
:
extern crate io_providers;
use std::io::Write;
use std::path::Path;
use io_providers::{Env, Io, NativeIo, SimulatedIo, StdStreams};
/// Gets the current working directory and prints it to stdout.
fn do_work<I: Io>(io: &mut I) {
let cur_dir = io.env().current_dir().unwrap();
let stdout = io.std_streams().output();
writeln!(stdout, "The current directory is: {}", cur_dir.to_str().unwrap()).unwrap();
}
fn main() {
// Test `do_work()` using a simulated I/O environment
let mut simulated_io = SimulatedIo::new().unwrap();
simulated_io.env_mut().set_current_dir(Path::new("/foo/bar")).unwrap();
do_work(&mut simulated_io);
assert_eq!(
"The current directory is: /foo/bar\n",
::std::str::from_utf8(simulated_io.std_streams().read_output()).unwrap());
// Now use a native I/O provided to access the real system
let mut real_io = NativeIo::new();
do_work(&mut real_io);
}
io-providers
is distributed under the MIT license.