#io #traits #bounds #static #reader #reader-writer #seek

flexible-io

包装值,使得 dyn-safe IO 特性不必出现在静态特性边界中

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 次下载

EUPL-1.2

25KB
343

Flexible IO

将读取器或写入器及其 io-trait 实现打包在一起,允许省略静态特性边界中的特性。

这样做的原因是使 API 能够优化使用读取器(或写入器)的情况,如果它是缓冲的,但并不需要它才能正确运行。或者,一个 API,其中 Seek 要求仅在运行时确定,例如,当功能的一部分不依赖于它时,应返回错误。

该包实现了一个可选的 SeekBufRead 的读取器,以及一个可选的 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

无运行时依赖

功能