add statics module

This commit is contained in:
hinto.janai 2024-09-26 20:41:42 -04:00
parent 02a99f3bb9
commit 6878a25266
No known key found for this signature in database
GPG key ID: D47CE05FA175A499
2 changed files with 49 additions and 1 deletions

View file

@ -15,8 +15,13 @@ mod blockchain;
mod config; mod config;
mod p2p; mod p2p;
mod rpc; mod rpc;
mod statics;
mod txpool; mod txpool;
fn main() { fn main() {
todo!() // Initialize global static `LazyLock` data.
statics::init_lazylock_statics();
// TODO: do other stuff
todo!();
} }

View file

@ -0,0 +1,43 @@
//! Global `static`s used throughout `cuprated`.
use std::{
sync::{atomic::AtomicU64, LazyLock},
time::{SystemTime, UNIX_EPOCH},
};
/// Define all the `static`s in the file/module.
///
/// 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_lazylock_statics {
($(
$( #[$attr:meta] )*
$name:ident: $t:ty = $init_fn:expr;
)*) => {
/// Initialize global static `LazyLock` data.
pub fn init_lazylock_statics() {
$(
LazyLock::force(&$name);
)*
}
$(
$(#[$attr])*
pub static $name: LazyLock<$t> = LazyLock::new(|| $init_fn);
)*
};
}
define_lazylock_statics! {
/// The start time of `cuprated`.
///
/// This must/should be set early on in `main()`.
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();
}