-
Notifications
You must be signed in to change notification settings - Fork 19
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
Conversation
binaries/cuprated/src/statics.rs
Outdated
/// 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); | ||
)* | ||
} | ||
|
||
$( | ||
$(#[$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 comment
The 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 static
s that should be initialized before anything else go in this macro, which will generate a function that initializes everything.
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.
(people including us in the far future btw)
fn main() { | ||
// Initialize global static `LazyLock` data. | ||
statics::init_lazylock_statics(); |
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
fn main() { | ||
// Initialize global static `LazyLock` data. | ||
statics::init_lazylock_statics(); |
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
binaries/cuprated/src/statics.rs
Outdated
$( | ||
LazyLock::force(&$name); | ||
)* | ||
} | ||
|
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.
tabs here should be changed to spaces
What
Adds a
constants
andstatics
module tocuprated
.constants
contains general constants used bycuprated
, currently it contains version strings roughly equivalent toversion.h
statics
contains globalstatic
data used throughoutcuprated
Some data (e.g.
const DEBUG: bool
) will be available incuprate_constants
so it isn't defined inconstants
.Why
statics::START_INSTANT_UNIX
is needed by RPC forget_block
-> start_timeconstants::VERSION_BUILD
is needed by RPC forget_block
-> version