8 个版本 (4 个重大更改)

0.5.0 2023 年 12 月 28 日
0.4.0 2023 年 6 月 13 日
0.3.0 2021 年 2 月 28 日
0.2.0 2020 年 11 月 24 日
0.1.0 2020 年 10 月 31 日

文件系统 中排名第 103

Download history 10442/week @ 2024-03-14 10758/week @ 2024-03-21 14215/week @ 2024-03-28 17986/week @ 2024-04-04 15348/week @ 2024-04-11 14166/week @ 2024-04-18 15863/week @ 2024-04-25 17667/week @ 2024-05-02 15757/week @ 2024-05-09 18436/week @ 2024-05-16 17370/week @ 2024-05-23 19610/week @ 2024-05-30 19426/week @ 2024-06-06 17296/week @ 2024-06-13 15146/week @ 2024-06-20 12700/week @ 2024-06-27

每月 67,223 次下载
用于 56 Crates(其中 2 个直接使用)

MIT/Apache 许可

23KB
367

Clircle

CI crates.io version MSRV

Clircle 提供了一个跨平台的 API,用于检测来自用户提供的参数中的读写循环。您可以从路径获取文件的重要标识符,以及对于所有三个 stdio 流,如果它们从文件或到文件管道,也是如此。

为什么?

想象一下,您想从几个文件中读取数据,并根据这些文件的包含内容输出某些内容。如果用户将程序的输出重定向到输入文件之一,您可能会陷入无限循环的读写。

该包提供了一个名为 Identifier 的结构体,它是一个平台相关的类型别名,因此您可以在所有平台上使用它,而无需自己引入任何条件编译。在 Unix 和 Windows 系统上,Identifier 包含用于在磁盘上标识文件的信息。

这两个结构体都实现了 Clircle 特性,并要求 clircle::Stdio 枚举和 &Path 需要 TryFrom,以便所有可能的输入都可以表示为 Identifier。最后,ClircleEq 的子特性,因此可以方便地比较标识符并检测循环。此外,clircle 包还提供了一些方便的函数,用于比较 Clircle 实现。

为什么我应该使用这个而不是 fs::Metadata

clircle 包通过单个 API 无缝地在 Linux 和 Windows 上运行,因此根本不需要条件编译。此外,MetadataExt 在 Windows 上尚未稳定,这意味着您需要自己挖掘 Windows API 以获取标识文件所需的信息。

这个包是从哪里来的?

这个crate起源于对bat项目的拉取请求。工具bat旨在成为Unix工具cat的即插即用替代品。由于cat会检测这些循环,因此bat也需要这样做,这也是大部分代码的作用所在。然而,决定认为新的逻辑

  • 对其他项目也有用,
  • 并且过于特定于平台,不适合bat的范围。

所以现在,您也可以使用clircle了!

依赖关系

~110–570KB