crystal_api/
debug.rs

1/// Represents internal wrapper logging level
2#[derive(Clone, Copy)]
3pub enum LoggingLevel {
4    /// Console output only
5    Console,
6    /// No logging
7    None,
8}
9
10pub(crate) static LOGGING_LEVEL: RwLock<LoggingLevel> = RwLock::new(LoggingLevel::None);
11static STARTUP_TIME: RwLock<MaybeUninit<Instant>> = RwLock::new(MaybeUninit::uninit());
12
13/// Sets logging level
14#[inline]
15pub fn set_internal_logging_level(logging_level: LoggingLevel) {
16    *LOGGING_LEVEL.write().unwrap() = logging_level
17}
18
19#[inline]
20pub(crate) fn get_logging_level() -> LoggingLevel {
21    *LOGGING_LEVEL.read().unwrap()
22}
23
24#[inline]
25pub(crate) fn get_startup_time() -> Instant {
26    unsafe { (*STARTUP_TIME.read().unwrap()).assume_init_read() }
27}
28
29#[inline]
30pub(crate) fn setup_startup_time() {
31    *STARTUP_TIME.write().unwrap() = MaybeUninit::new(Instant::now())
32}
33
34macro_rules! log {
35    ($($arg:tt)*) => {{
36        use crate::debug::{get_logging_level, get_startup_time, LoggingLevel};
37        let message = format!($($arg)*);
38        let now = get_startup_time().elapsed();
39        match get_logging_level() {
40            LoggingLevel::Console => println!("[{:>13.6}] [LOG] {}", now.as_secs_f32(), message),
41            _ => ()
42        }
43    }};
44}
45
46macro_rules! error {
47    ($($arg:tt)*) => {{
48        use crate::debug::{get_logging_level, get_startup_time, LoggingLevel};
49        let message = format!($($arg)*);
50        let now = get_startup_time().elapsed();
51        match get_logging_level() {
52            LoggingLevel::Console => println!("[{:>13.6}] [ERROR] {}", now.as_secs_f32(), message),
53            _ => ()
54        }
55    }};
56}
57
58macro_rules! fmt_size {
59    ($size:expr) => {
60        if $size >= 1024 * 1024 * 1024 {
61            format!("{:.2}GB", $size as f32 / 1024. / 1024.)
62        } else if $size >= 1024 * 1024 {
63            format!("{:.2}MB", $size as f32 / 1024. / 1024.)
64        } else if $size >= 1024 {
65            format!("{:.2}KB", $size as f32 / 1024.)
66        } else {
67            format!("{}B", $size as u16)
68        }
69    };
70}
71
72use std::{mem::MaybeUninit, sync::RwLock, time::Instant};
73
74pub(crate) use error;
75pub(crate) use fmt_size;
76pub(crate) use log;