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