1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2018 年 9 月 14 日

#141 in #functional

MIT 许可证

12KB
245 代码行数(不包括注释)

ReadTransformer

ReadTransformer 是一个用于处理函数式 Read 对象的结构体。

它接受 Read 对象、映射函数,并作为中介 Read 对象。

示例

let mut data = Cursor::new(vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
let mut transformed = ReadTransformer::new(
	&mut data,
	5,
	Box::new(|buffer: &mut [u8], _position, _last_attempt| -> Option<(Vec<u8>, usize)> {
		return Some((
			buffer
				.iter()
				.map(|x| {
					if x % 2 == 0 {
						return 0;
					};
					return *x;
				})
				.collect::<Vec<_>>(),
			buffer.len(),
		));
	}),
);
let mut out = vec![0; 10];
transformed.read_exact(&mut out).unwrap();
assert_eq!(out, [1, 0, 3, 0, 5, 0, 7, 0, 9, 0]);

用法

将以下依赖项添加到您的 Cargo.toml 文件的依赖项部分

read_transform = { git = "https://github.com/Reeywhaar/read_transform" }

文档

使用 cargo doc --no-deps --open 命令查看文档


lib.rs:

ReadTransformer 是一个用于处理函数式 Read 对象的结构体。

它接受 Read 对象、映射函数,并作为中介 Read 对象。

示例

let mut data = Cursor::new(vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
let mut transformed = ReadTransformer::new(
&mut data,
5,
Box::new(|buffer: &mut [u8], _position, _last_attempt| -> Option<(Vec<u8>, usize)> {
return Some((
buffer
.iter()
.map(|x| {
if x % 2 == 0 {
return 0;
};
return *x;
})
.collect::<Vec<_>>(),
buffer.len(),
));
}),
);
let mut out = vec![0; 10];
transformed.read_exact(&mut out).unwrap();
assert_eq!(out, [1, 0, 3, 0, 5, 0, 7, 0, 9, 0]);

无运行时依赖