5 个不稳定版本
0.2.0 | 2024年2月22日 |
---|---|
0.1.2 | 2023年12月19日 |
0.1.1 | 2023年12月15日 |
0.1.0 | 2023年9月25日 |
0.0.0 | 2023年9月20日 |
#720 在 Rust 模式
66 每月下载量
用于 tera-former
27KB
165 行
entrypoint
使用这个有观点的应用框架/包装器消除主函数的样板代码
关于
entrypoint
的设计目标如下
- 消除应用启动/配置的样板代码
- 帮助强制执行应用最佳实践
这个 crate 实际上做什么?
entrypoint
将用户定义的函数包装起来,自动配置/设置/处理以下内容
用户定义的函数旨在替换 main()
。
这意味着这个主/入口点函数可以编写得好像所有配置/处理/样板代码都准备好了。更具体地说
anyhow
可用并可使用clap::Parser
结构已被解析并填充.dotenv
文件已被解析;环境变量已准备好tracing
已配置,全局订阅者已注册
开发者的话
entrypoint
与部署我的第一个 crate 一样重要。
事实证明,它并不真的那么有用。我有点认为,最好还是在你的应用中明确设置这些内容。这样做不值得。
不太可能进一步开发。
使用
默认配置
-
包含
entrypoint
预言use entrypoint::prelude::*;
-
定义一个
clap
结构和 derive 默认入口点特质实现#[derive(clap::Parser, DotEnvDefault, LoggerDefault, Debug)] #[log_format(full)] #[log_level(entrypoint::tracing::Level::INFO)] #[command(version, about, long_about = None)] struct CLIArgs { #[arg(short, long, env)] cli_arg: bool, }
-
定义一个入口点/main 函数
#[entrypoint::entrypoint] fn entrypoint(args: CLIArgs) -> entrypoint::anyhow::Result<()> { // args are parsed and ready to use info!("cli_arg set to: {:?}", args.cli_arg); // env::vars() already loaded-from/merged-with .dotenv file(s) let _my_var = env::vars("SOMETHING_FROM_DOTENV_FILE"); // logging is ready to use info!("entrypoint::entrypoint"); Ok(()) }
自定义配置
使用默认行为是完全合理的,但覆盖一些默认实现可以提供定制化。
使用说明
entrypoint
函数必须- 有一个
clap::Parser
输入参数 - 返回
entrypoint::anyhow::Result<()>
- 有一个
- 当与其它属性宏(例如
[tokio::main]
)一起使用时,#[entrypoint::entrypoint]
的顺序可能很重要。
文档
有关更多信息,请参阅
软件包
entrypoint
分为以下软件包
entrypoint
:核心特性和功能entrypoint_macros
:进一步减少样板代码的便利宏
贡献
在做什么之前:打开一个问题。
依赖关系
~3–4.5MB
~77K SLoC