use crate::{_js_unsafe_ffi_doc, macro_apply};
use crate::{DiagLevel, DiagOut, Infallible, TextOut};
#[allow(unused_imports)]
use devela::{_js_doc, _js_extern};
#[doc = crate::_tags!(runtime namespace)]
#[doc = crate::_doc_meta!{location("lang/prog/ffi/js")}]
#[macro_apply(crate::__doc_show(feature = "unsafe_ffi"))]
#[derive(Debug)]
pub struct JsConsole;
#[rustfmt::skip]
#[cfg(not(feature = "safe_lang"))]
#[macro_apply(crate::_js_unsafe_ffi_doc)]
impl JsConsole {
#[doc = _js_doc!(console "clear")]
pub fn clear() { console_clear() }
#[doc = _js_doc!(console "debug")]
pub fn debug(text: &str) { unsafe { console_debug(text.as_ptr(), text.len()); } }
#[doc = _js_doc!(console "error")]
pub fn error(text: &str) { unsafe { console_error(text.as_ptr(), text.len()); } }
#[doc = _js_doc!(console "info")]
pub fn info(text: &str) { unsafe { console_info(text.as_ptr(), text.len()); } }
#[doc = _js_doc!(console "log")]
pub fn log(text: &str) { unsafe { console_log(text.as_ptr(), text.len()); } }
#[doc = _js_doc!(console "trace")]
pub fn trace() { console_trace(); }
#[doc = _js_doc!(console "warn")]
pub fn warn(text: &str) { unsafe { console_warn(text.as_ptr(), text.len()); } }
#[doc = _js_doc!(console "count")]
pub fn count(label: &str) { unsafe { console_count(label.as_ptr(), label.len()); } }
#[doc = _js_doc!(console "countReset")]
pub fn count_reset(label: &str) {
unsafe { console_count_reset(label.as_ptr(), label.len()); } }
#[doc = _js_doc!(console "group")]
pub fn group(text: &str) { unsafe { console_group(text.as_ptr(), text.len()); } }
#[doc = _js_doc!(console "groupCollapsed")]
pub fn group_collapsed(text: &str) {
unsafe { console_group_collapsed(text.as_ptr(), text.len()); } }
#[doc = _js_doc!(console "groupEnd")]
pub fn group_end() { console_group_end(); }
#[doc = _js_doc!(console "time")]
pub fn time(name: &str) { unsafe { console_time(name.as_ptr(), name.len()); } }
#[doc = _js_doc!(console "timeEnd")]
pub fn time_end(name: &str) { unsafe { console_time_end(name.as_ptr(), name.len()); } }
#[doc = _js_doc!(console "timeLog")]
pub fn time_log(name: &str) { unsafe { console_time_log(name.as_ptr(), name.len()); } }
}
_js_extern! {
[ module: "api_console" ]
safe fn console_clear();
unsafe fn console_debug(str_ptr: *const u8, str_len: usize);
unsafe fn console_error(str_ptr: *const u8, str_len: usize);
unsafe fn console_info(str_ptr: *const u8, str_len: usize);
unsafe fn console_log(str_ptr: *const u8, str_len: usize);
safe fn console_trace();
unsafe fn console_warn(str_ptr: *const u8, str_len: usize);
unsafe fn console_count(str_ptr: *const u8, str_len: usize);
unsafe fn console_count_reset(str_ptr: *const u8, str_len: usize);
unsafe fn console_group(str_ptr: *const u8, str_len: usize);
unsafe fn console_group_collapsed(str_ptr: *const u8, str_len: usize);
safe fn console_group_end();
unsafe fn console_time(str_ptr: *const u8, str_len: usize);
unsafe fn console_time_end(str_ptr: *const u8, str_len: usize);
unsafe fn console_time_log(str_ptr: *const u8, str_len: usize);
}
#[cfg(not(feature = "safe_lang"))]
#[macro_apply(_js_unsafe_ffi_doc)]
impl DiagOut for JsConsole {
type Error = Infallible;
fn diag(&mut self, level: DiagLevel, text: &str) -> Result<(), Self::Error> {
match level {
DiagLevel::Trace => Self::debug(text), DiagLevel::Debug => Self::debug(text),
DiagLevel::Info => Self::info(text),
DiagLevel::Warn => Self::warn(text),
DiagLevel::Error => Self::error(text),
}
Ok(())
}
}
#[cfg(not(feature = "safe_lang"))]
#[macro_apply(_js_unsafe_ffi_doc)]
impl TextOut for JsConsole {
type Error = Infallible;
fn write_text(&mut self, text: &str) -> Result<(), Self::Error> {
Self::log(text);
Ok(())
}
}