crossbus 0.0.6-a

A Platform-Less Runtime-Less Actor Computing Model
Documentation
#![allow(unused)]

#[cfg(all(feature = "time", feature = "wasm32"))]
pub mod time_wasm32;

use core::sync::atomic::{AtomicBool, Ordering};

static LOGGER_INIT: AtomicBool = AtomicBool::new(false);

pub fn init() {
    init_logger();
}

pub fn init_logger() {
    #[cfg(not(feature = "wasm32"))]
    if !LOGGER_INIT.load(Ordering::SeqCst) {
        simple_logger::init_with_level(log::Level::Debug).unwrap();
        log::info!("init logger");
        LOGGER_INIT.store(true, Ordering::SeqCst);
    }

    #[cfg(feature = "wasm32")]
    if !LOGGER_INIT.load(Ordering::SeqCst) {
        wasm_logger::init(wasm_logger::Config::default());
        log::info!("init logger");
        LOGGER_INIT.store(true, Ordering::SeqCst);
    }
}

pub fn init_module_level(module: &str, level: log::Level) {
    #[cfg(not(feature = "wasm32"))]
    if !LOGGER_INIT.load(Ordering::SeqCst) {
        simple_logger::SimpleLogger::new()
            .with_level(log::LevelFilter::Off)
            .with_module_level(module, level.to_level_filter())
            .init()
            .unwrap();
        log::info!("init logger");
        LOGGER_INIT.store(true, Ordering::SeqCst);
    }

    #[cfg(feature = "wasm32")]
    if !LOGGER_INIT.load(Ordering::SeqCst) {
        wasm_logger::init(wasm_logger::Config::new(level).module_prefix(module));
        log::info!("init logger");
        LOGGER_INIT.store(true, Ordering::SeqCst);
    }
}

#[cfg(feature = "wasm32")]
pub fn now() -> f64 {
    use js_sys::Date;

    Date::now() / 1000.0
}

pub fn get_now() -> f64 {
    #[cfg(any(feature = "tokio", feature = "async-std"))]
    {
        std::time::SystemTime::now()
            .duration_since(std::time::UNIX_EPOCH)
            .unwrap()
            .as_secs_f64()
    }
    #[cfg(feature = "wasm32")]
    {
        now()
    }
    #[cfg(not(any(feature = "wasm32", feature = "tokio", feature = "async-std")))]
    unimplemented!()
}