4 个版本
| 0.1.3 | 2023 年 9 月 27 日 |
|---|---|
| 0.1.2 | 2023 年 9 月 22 日 |
| 0.1.1 | 2023 年 9 月 22 日 |
| 0.1.0 | 2023 年 9 月 22 日 |
#1100 in 开发工具
44KB
579 行
todo2
todo2(又称 todo 或 die)- 一个更好的 todo! 宏,灵感来源于 searls/todo_or_die
此软件包提供了一个更好的 todo! 宏,允许您指定代码应该实现的时间表和条件。当条件或时间表满足时,代码将崩溃或发出编译错误,或仅记录错误。
注意:此软件包仍在早期开发阶段,因此可能存在一些错误,API 可能在未来发生变化。如果您有任何建议或发现错误,请提出问题或发起拉取请求。
使用方法
将以下内容添加到您的 Cargo.toml
[dependencies]
todo2 = "0.1.0"
或者直接运行此命令
cargo add todo2
#[macro_use]
extern crate todo2;
fn main() {
todo!("Hack NASA", by: 2024-3-26 at 9:00);
get_a_hot_gf(true)
}
fn get_a_hot_gf(single: bool) {
todo!("Get a hot girlfriend", if: single);
}
功能
log- 仅记录错误而不是崩溃或发出编译错误,这在严重项目中可能很有用,此功能尊重您已将log软件包添加到依赖项中compile-error- 发出编译错误而不是崩溃。with-chrono- 启用chrono,这使您可以使用chrono::Utc或chrono::DateTime类型来指定by条件的截止日期。尚未实现。with-time- 启用time,这使您可以使用time::OffsetDateTime类型或time::macros::datetime宏来指定by条件的截止日期。尚未实现。and-time- 允许您在by条件中指定一天中的特定时间original-compatibility- 允许您在使用此宏时无需传递任何参数,或者仅传递消息。strict-syntax- 启用严格语法,强制您在消息后放置逗号或分号。chrono-backend- 使用chrono作为by条件计算 UNIX 时间戳的后端,而不是默认实现。如果我在依赖项中启用此功能,因为它比默认实现更准确。 了解更多time-backend- 使用time作为by条件计算 UNIX 时间戳的后端,而不是默认实现。如果我在依赖项中启用此功能,因为它比默认实现更准确。 了解更多am-cool- 表示你很酷。我爱你。
默认功能包括:original-compatibility、strict-syntax、and-time、time-backend。
示例
使用 log 功能
您必须在您的 Cargo.toml 中启用 log 功能
[dependencies]
# You also have to add the `log` crate to your dependencies
log = "0.4.20"
# Use any implementation you want for the logging, in this example, I will use the `simple_logger` crate
simple_logger = "4.2.0"
# and of course, our beloved `todo2` crate
todo2 = { version = "0.1.0", features = ["log"] }
#[macro_use]
extern crate todo2;
#[macro_use]
extern crate log;
use simple_logger::SimpleLogger;
fn main() {
// Initialize the logger
SimpleLogger::new().init().unwrap();
todo!("Make a cool crate", by: 2024-02-02)
}
当达到截止日期时,将记录如下错误
2024-02-02T17:27:07.013874956Z ERROR [logging_example] src/main.rs:9: Make a cool crate
请注意,您不能同时启用 compile-error 功能和 log 功能。一次只能启用其中之一。
使用 compile-error 功能
首先,将 crate 添加到您的 Cargo.toml 并启用 compile-error 功能
cargo add todo2 --features compile-error
#[macro_use]
extern crate todo2;
fn main() {
todo!("Remove this secret", by: 2024-02-23);
let my_little_secret = "very secret";
}
这将产生如下编译错误,当尝试以发布模式编译代码时。
by 条件中的时间
默认情况下,by 条件接受一个原始日期,并使用我们的自定义解析器解析它,该解析器期望日期格式为 YYYY-MM-DD 格式,或者如果启用了 and-time 功能,则为 YYYY-MM-DD at HH:MM 或 YYYY-MM-DD @ HH:MM 格式。然后它将在 UTC 中计算 UNIX 时间戳,并将其与当前时间戳进行比较。
关于解析部分,这里不感兴趣。只是宏的魔法。复杂性出现在我们想要从解析的日期计算 UNIX 时间戳时。在这里,时区和夏令时以及闰秒开始发挥作用。我不愿意处理这种复杂性,因为我懒惰,这是一个“进程宏”,而不是普通crate,这意味着它在编译时运行,我们都知道 Rust 的编译时间“很快” :) 我不想让它变慢。所以我实现了一个简单的算法来计算 UNIX 时间戳,它不够准确,但可以工作。嗯,有点。
后端
这就是为什么我们有了 chrono-backend 和 time-backend 功能,使用 chrono 或 time crate 来计算 UNIX 时间戳,而不是默认实现。
如果您对添加更多依赖到项目依赖树没有问题,或者您已经在依赖中拥有其中之一,我鼓励您启用它们之一。至少直到我们有更好的默认后端实现。
后端不会影响解析部分或语法,它只影响Unix时间戳的计算,这是内部事务,所以从这个角度来看,您不必担心。
也许吧?
以下是一些我可能在未来的版本中实现的想法。
- 实现
with-chrono功能,使用户能够使用chrono::Utc或chrono::DateTime类型来指定by条件的截止日期,而不是原始日期。示例
todo!("Make a cool crate", by: chrono::Utc.with_ymd_and_hms(2024, 02, 02, 9, 0, 0));
- 实现
with-time功能,使用户能够使用time::OffsetDateTime类型或time::macros::datetime宏来指定by条件的截止日期,而不是原始日期。示例
todo!("Make a cool crate", by: time::macros::datetime!(2024-02-02 09:00:00));
- 使
if条件解析器能够在编译时评估一些条件,这样我们就可以使用compile-error功能与if条件。示例
todo!("Remove this secret", if: !cfg!(debug_assertions));
let my_little_secret = "i love you";
贡献
我很乐意接受任何贡献,但首先请考虑阅读CONTRIBUTING.md指南,以避免在我们的一些不必要的事情上浪费时间。
主要关键字包括:签名提交、约定提交、无表情符号、PR通常不应超过三个提交。
许可证
本项目的许可证为MIT许可证。更多信息请参阅LICENSE。如果您愿意,也可以在Unlicense许可证下使用。更多信息请参阅LICENSE-UNLICENSE。
依赖
~19–530KB