-
Notifications
You must be signed in to change notification settings - Fork 18
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
cuprated: add constants
& statics
modules
#301
Changes from 4 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
//! General constants used throughout `cuprated`. | ||
|
||
use const_format::formatcp; | ||
|
||
/// `cuprated`'s semantic version (`MAJOR.MINOR.PATCH`) as string. | ||
pub const VERSION: &str = clap::crate_version!(); | ||
|
||
/// [`VERSION`] + the build type. | ||
/// | ||
/// If a debug build, the suffix is `-debug`, else it is `-release`. | ||
pub const VERSION_BUILD: &str = if cfg!(debug_assertions) { | ||
formatcp!("{VERSION}-debug") | ||
} else { | ||
formatcp!("{VERSION}-release") | ||
}; | ||
|
||
#[cfg(test)] | ||
mod test { | ||
use super::*; | ||
|
||
#[test] | ||
fn version() { | ||
assert_eq!(VERSION, "0.0.1"); | ||
} | ||
|
||
#[test] | ||
fn version_build() { | ||
if cfg!(debug_assertions) { | ||
assert_eq!(VERSION_BUILD, "0.0.1-debug"); | ||
} else { | ||
assert_eq!(VERSION_BUILD, "0.0.1-release"); | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
//! Global `static`s used throughout `cuprated`. | ||
|
||
use std::{ | ||
sync::{atomic::AtomicU64, LazyLock}, | ||
time::{SystemTime, UNIX_EPOCH}, | ||
}; | ||
|
||
/// Define all the `static`s that should be always be initialized early on. | ||
/// | ||
/// This wraps all `static`s inside a `LazyLock` and generates | ||
/// a [`init_lazylock_statics`] function that must/should be | ||
/// used by `main()` early on. | ||
macro_rules! define_init_lazylock_statics { | ||
($( | ||
$( #[$attr:meta] )* | ||
$name:ident: $t:ty = $init_fn:expr; | ||
)*) => { | ||
/// Initialize global static `LazyLock` data. | ||
pub fn init_lazylock_statics() { | ||
$( | ||
LazyLock::force(&$name); | ||
)* | ||
} | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. tabs here should be changed to spaces |
||
$( | ||
$(#[$attr])* | ||
pub static $name: LazyLock<$t> = LazyLock::new(|| $init_fn); | ||
)* | ||
}; | ||
} | ||
|
||
define_init_lazylock_statics! { | ||
/// The start time of `cuprated`. | ||
START_INSTANT: SystemTime = SystemTime::now(); | ||
|
||
/// Start time of `cuprated` as a UNIX timestamp. | ||
START_INSTANT_UNIX: u64 = START_INSTANT | ||
.duration_since(UNIX_EPOCH) | ||
.expect("Failed to set `cuprated` startup time.") | ||
.as_secs(); | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I have little faith that people will manually update things so newly added There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. (people including us in the far future btw) |
||
|
||
#[cfg(test)] | ||
mod test { | ||
use super::*; | ||
|
||
/// Sanity check for startup UNIX time. | ||
#[test] | ||
fn start_instant_unix() { | ||
// Fri Sep 27 01:07:13 AM UTC 2024 | ||
assert!(*START_INSTANT_UNIX > 1727399233); | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The statics get initialized here.
We could add this to a broader
init_everything()
later that setups up logging as well.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
for now this will be ok