use crate::*;
impl Console {
pub fn log(message: &str) {
web_sys::console::log_1(&message.into());
Self::append_entry(ConsoleEntry {
level: LogLevel::Log,
message: message.to_string(),
});
}
pub fn warn(message: &str) {
web_sys::console::warn_1(&message.into());
Self::append_entry(ConsoleEntry {
level: LogLevel::Warn,
message: message.to_string(),
});
}
pub fn error(message: &str) {
web_sys::console::error_1(&message.into());
Self::append_entry(ConsoleEntry {
level: LogLevel::Error,
message: message.to_string(),
});
}
pub fn clear() {
let log: Signal<Vec<ConsoleEntry>> = Self::get_signal();
log.set(Vec::new());
}
fn get_signal() -> Signal<Vec<ConsoleEntry>> {
unsafe {
if CONSOLE_LOG_SIGNAL.is_null() {
panic!("init_console must be called before Console operations");
}
Signal::from_inner(CONSOLE_LOG_SIGNAL)
}
}
fn append_entry(entry: ConsoleEntry) {
let log: Signal<Vec<ConsoleEntry>> = Self::get_signal();
let mut current: Vec<ConsoleEntry> = log.get();
current.push(entry);
if current.len() > MAX_CONSOLE_LOG_ENTRIES {
let excess: usize = current.len() - MAX_CONSOLE_LOG_ENTRIES;
current.drain(0..excess);
}
log.set(current);
}
}