5 个版本 (3 个破坏性更新)
0.4.2 | 2021 年 11 月 5 日 |
---|---|
0.4.0 | 2021 年 11 月 5 日 |
0.3.0 | 2021 年 10 月 31 日 |
0.2.0 | 2021 年 10 月 25 日 |
0.1.0 | 2021 年 8 月 13 日 |
#64 在 #result
每月 28 次下载
在 cli-toolbox 中使用
61KB
1K SLoC
macrofied-toolbox
此库提供了一种在 Rust 的 Result<T,E>
和 Option<T>
模式添加调试信息的舒适体验
类似于类似的 cli-toolbox
crate,该调试逻辑相似,这并不是一个日志替代品;它的目的是在应用程序开发期间生成调试输出。
虽然宏被设计得更加舒适,但它们包括不包含调试以提供代码一致性变体,因此您可以在项目中的整个项目中一致地使用相同的语法。
Result<T,E>
use std::fs::File;
use std::io;
use std::io::{BufWriter, Write};
use macrofied_toolbox::result;
fn main() -> io::Result<()> {
let file_name = "foo.txt";
// attempts to create a file
result! {
// * if you use the try "?" punctuation, the result! macro will
// still output debug or error before returning the Result::Err
@when File::create(file_name)?;
// if the file is successfully created, write some content
@ok (file) => {
let mut out = BufWriter::new(file);
writeln!(out, "some content")?;
writeln!(out, "some more content")?;
}
// if an exception occurs output debug message to stdout
@debug "problem creating file: {:?} - {}", file_name, err
// * debug messages are conditionally compiled
// and do not output anything in release builds
// * "err" contains the Result::Err value and can be optionally referenced,
// it is discarded if it is not referenced
}
Ok(())
}
Option<T>
use std::fs::File;
use std::io;
use std::io::{BufWriter, Write};
use std::process::exit;
use macrofied_toolbox::option;
fn main() {
let file_name = "foo.txt";
if let None = example(file_name) {
eprintln!("failed to create {:?} file!", file_name);
exit(-1);
}
}
fn example(file_name: &str) -> Option<()> {
// attempts to create a file
option! {
// * if you use the try "?" punctuation, the result! macro will
// still output debug or error before returning the Result::Err
@when File::create(file_name).ok()?;
// if the file is successfully created, write some content
@some (file) => {
let mut out = BufWriter::new(file);
writeln!(out, "some content").ok()?;
writeln!(out, "some more content").ok()?;
}
// if an exception occurs output debug message to stdout
@debug "problem creating file: {:?}", file_name
// * debug messages are conditionally compiled
// and do not output anything in release builds
// * "err" contains the Result::Err value and can be optionally referenced,
// it is discarded if it is not referenced
}
Some(())
}
资源
用法
每个宏都由一个功能控制;分别是 all
、option
或 result
。
option!
宏
[dependencies]
macrofied-toolbox = { version = "0.4", features = ["option"] }
result!
宏
[dependencies]
macrofied-toolbox = { version = "0.4", features = ["result"] }
功能
虽然 macrofied-toolbox
被设计得更加舒适,但生成调试输出由可选的 X-debug
功能控制,以实现最大灵活性。
* 调试输出仅在非优化构建中有效 *
all-debug
- 启用控制台调试和两个功能option-debug
- 启用控制台调试和option!
宏result-debug
- 启用控制台调试和result!
宏
路线图
-
为 Ok和 Err 提供日志记录 -
其他模式?
已实现
-
result!
- 处理Result<T,E>
表达式 -
option!
- 处理Option<T>
表达式 - 支持引用/可变
Ok<T>
和Some<T>
值
依赖项
~0–380KB