4 个版本 (2 个破坏性更新)
新 0.3.0 | 2024 年 8 月 19 日 |
---|---|
0.2.0 | 2023 年 12 月 7 日 |
0.1.1 | 2023 年 12 月 3 日 |
0.1.0 | 2023 年 11 月 16 日 |
#1152 in Rust 模式
每月 46 次下载
25KB
343 行
Flexible IO
将读取器或写入器及其 io-trait 实现打包在一起,允许省略静态特性边界中的特性。
这样做的原因是使 API 能够优化使用读取器(或写入器)的情况,如果它是缓冲的,但并不需要它才能正确运行。或者,一个 API,其中 Seek 要求仅在运行时确定,例如,当功能的一部分不依赖于它时,应返回错误。
该包实现了一个可选的 Seek
或 BufRead
的读取器,以及一个可选的 Seek
写入器;调用者可以通过调用设置方法提供这些特性,在一个局部 作用域 中,这些特性被静态显示为已实现。
用法
use flexible_io::Reader;
fn read_from<R>(reader: Reader<R>) {
if let Some(seekable) = file.as_seek_mut() {
with_seek_strategy(reader);
} else {
with_read_strategy(reader);
}
}
已知问题
由于生存期问题,无法保留已实现特性的知识。也就是说,每次从 Reader
转换为类型 &mut dyn {Read,BufRead,Seek}
的具体值时,都会可变借用整个读取器。因此,您不能同时拥有这样的引用。作为一种权宜之计,在适当的地方展开从 as_*
方法返回的 Option
。