25 个版本
0.3.19 | 2024 年 6 月 19 日 |
---|---|
0.3.17 | 2023 年 2 月 12 日 |
0.3.11 | 2022 年 6 月 13 日 |
0.3.9 | 2021 年 11 月 14 日 |
0.3.4 | 2021 年 3 月 8 日 |
#77 在 并发
333 每月下载量
用于 12 crates
47KB
1K SLoC
runnel
可插拔的 I/O 流。现在支持:标准输入输出、字符串 I/O、内存管道。
功能
- 支持常见操作:标准输入、标准输出、标准错误、字符串输入、字符串输出、管道输入和管道输出。
- 接口轻薄
- 支持测试流 I/O
- 最低支持 rustc 1.57.0 (f1edd0429 2021-11-29)
示例
stdio 示例
use runnel::RunnelIoeBuilder;
let sioe = RunnelIoeBuilder::new().build();
stringio 示例
use runnel::RunnelIoeBuilder;
use std::io::{BufRead, Write};
let sioe = RunnelIoeBuilder::new()
.fill_stringio_with_str("ABCDE\nefgh\n")
.build();
// pluggable stream in
let mut lines_iter = sioe.pin().lock().lines().map(|l| l.unwrap());
assert_eq!(lines_iter.next(), Some(String::from("ABCDE")));
assert_eq!(lines_iter.next(), Some(String::from("efgh")));
assert_eq!(lines_iter.next(), None);
// pluggable stream out
#[rustfmt::skip]
let res = sioe.pout().lock()
.write_fmt(format_args!("{}\nACBDE\nefgh\n", 1234));
assert!(res.is_ok());
assert_eq!(sioe.pout().lock().buffer_str(), "1234\nACBDE\nefgh\n");
// pluggable stream err
#[rustfmt::skip]
let res = sioe.perr().lock()
.write_fmt(format_args!("{}\nACBDE\nefgh\n", 1234));
assert!(res.is_ok());
assert_eq!(sioe.perr().lock().buffer_str(), "1234\nACBDE\nefgh\n");
pipeio 示例
use runnel::RunnelIoeBuilder;
use runnel::medium::pipeio::pipe;
use std::io::{BufRead, Write};
// create in memory pipe
let (a_out, a_in) = pipe(1);
// a working thread
let sioe = RunnelIoeBuilder::new()
.fill_stringio_with_str("ABCDE\nefgh\n")
.pout(a_out) // pluggable pipe out
.build();
let handler = std::thread::spawn(move || {
for line in sioe.pin().lock().lines().map(|l| l.unwrap()) {
let mut out = sioe.pout().lock();
let _ = out.write_fmt(format_args!("{}\n", line));
let _ = out.flush();
}
});
// a main thread
let sioe = RunnelIoeBuilder::new()
.fill_stringio_with_str("ABCDE\nefgh\n")
.pin(a_in) // pluggable pipe in
.build();
let mut lines_iter = sioe.pin().lock().lines().map(|l| l.unwrap());
assert_eq!(lines_iter.next(), Some(String::from("ABCDE")));
assert_eq!(lines_iter.next(), Some(String::from("efgh")));
assert_eq!(lines_iter.next(), None);
assert!(handler.join().is_ok());
变更日志
许可
该项目受以下任一许可证的许可:
- Apache 许可证 2.0 版,(LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
您可选择。