entrypoint
eliminate main function boilerplate with this opinionated application framework/wrapper
About
entrypoint has the following design goals:
- eliminate application startup/configuration boilerplate
- help enforce application best practices
What does this crate actually do?
entrypoint wraps a user defined function with automatic configuration/setup/processing of:
- logging (via
tracing) - command-line argument parsing (via
clap) .dotenvfile processing and environment variable population/overrides (viadotenvy)- easy application error handling (via
anyhow)
The user defined function is intended to be/replace main().
Meaning, this main/entrypoint function can be written as if all the configuration/processing/boilerplate is ready-to-use. More explicitly:
clap::Parserstruct has been parsed and populated.dotenvfiles have been parsed; environment variables are ready to gotracinghas been configured and the global subscriber has been registered
Usage
Default Config
-
Include the
entrypointprelude:use *; -
Define a
clapstruct and derive default entrypoint trait impls: -
Define an entrypoint/main function:
Custom Config
Using the default behavior is totally reasonable, but overwriting some trait default impl(s) can provide customization.
Usage Notes
- The
entrypointfunction must:- Accept a
clap::Parseras an input. - Return
entrypoint::anyhow::Result<()>.
- Accept a
#[entrypoint::entrypoint]ordering may matter when used with other attribute macros.
Documentation
For more information, refer to:
Crates
entrypoint is divided into the following crates:
entrypoint: core traits and functionalityentrypoint_macros: convienence macros to further reduce boilerplate
Contributing
Before doing anything else: open an issue.