1 个稳定版本
1.0.0 | 2022年11月25日 |
---|
#1426 在 Rust 模式
23KB
277 行
std_io_iterators
用于 STDIN 的迭代器和 STDOUT 的包装器。允许轻松管道操作,并在管道断裂时优雅地关闭应用程序
由 SnS Development 项目提供
问题
使用 STDIN
和 STDOUT
(管道输入或输出)比必要的更复杂。开发者应该能够通过 STDIN
获取要管道输入的数据的迭代器,并应该能够通过 STDOUT
简单地输出任何实现了 std::fmt::Debug 特性的迭代器。
此外,如果 STDOUT
管道“损坏”(即管道输入的数据退出),则通过 STDOUT
输出的迭代器应该是可恢复的,以便可以重新定向数据。(见 prelude::PipeOut::pipe_out
的警告)
解决方案
- 一个结构体 prelude::PipeInIterator - 一个 [Iterator],抽象了通过
STDIN
管道输入的过程 - 一个特质 prelude::PipeOut - 实现了任何迭代器,它遍历实现 std::fmt::Debug 特性(如 [String])的元素,并抽象了通过
STDOUT
管道输出的过程
示例
use std_io_iterators::prelude::*;
fn main() -> Result<(), std::io::Error> {
// Pipe in, lazy transform, pipe out
match PipeInIterator::try_new()
.expect("1669235203 - Unable to lock STDIN")
.map(INTERNAL_FUNCTION)
.pipe_out()
{
Err(e) if e.is_broken_pipe() => {
// Log Broken Pipe
return Ok(());
}
Err(e) => return e.dump_data().into(),
_ => (),
}
// Pipe out array, re-direct additional data
if let Err(mut e) = (["test1", "test2", "test3"].iter()).pipe_out() {
e.by_ref()
.for_each(|_recovered_datum| todo!("Handle recovered data"));
return e.result.into();
}
Ok(())
}
const INTERNAL_FUNCTION: fn(std::rc::Rc<String>) -> String =
|line| format!("Prepend-{}", line);
如何:更新文档
此项目的文档包含在代码中的文档注释中。然后,通过 rustdoc
将这些注释编译成项目最终的文档,当代码发布时。
在源代码根目录中包含一个 README.md
文件以在相应的版本管理系统中进行显示是良好的实践。遵循 DRY 原则
系统中的每一项知识都必须有一个单一、明确、权威的表示
为了防止文件与文档不同步,我通过包含的脚本简单地复制文档的根页。
update_documentation.sh
在项目根目录下运行
# Update CargoDocs from source code
cargo doc
# Update README.md from source code
cargo readme > README.md
许可证:MIT