devela/lang/ffi/js/
console.rs

1// devela::lang::ffi::js::console
2//
3//! Defines [`JsConsole`].
4//
5
6#[allow(unused_imports)]
7use devela::{_js_doc, _js_extern};
8
9#[doc = crate::TAG_NAMESPACE!()]
10/// Javascript Console.
11#[derive(Debug)]
12pub struct JsConsole;
13
14/// # Javascript API console
15///
16/// - <https://console.spec.whatwg.org/>
17/// - <https://developer.mozilla.org/en-US/docs/Web/API/console>
18#[rustfmt::skip]
19#[cfg(not(feature = "safe_lang"))]
20#[cfg(all(feature = "unsafe_ffi", not(windows)))]
21#[cfg_attr(nightly_doc, doc(cfg(all(feature = "unsafe_ffi", target_arch = "wasm32"))))]
22impl JsConsole {
23    #[doc = _js_doc!(console "clear")]
24    /// Clears the console if possible.
25    pub fn clear() { console_clear() }
26
27    #[doc = _js_doc!(console "debug")]
28    /// Outputs a message to the console with the debug log level.
29    pub fn debug(text: &str) { unsafe { console_debug(text.as_ptr(), text.len()); } }
30
31    #[doc = _js_doc!(console "error")]
32    /// Outputs a message to the console with the error log level.
33    pub fn error(text: &str) { unsafe { console_error(text.as_ptr(), text.len()); } }
34
35    #[doc = _js_doc!(console "info")]
36    /// Outputs a message to the console with the info log level.
37    pub fn info(text: &str) { unsafe { console_info(text.as_ptr(), text.len()); } }
38
39    #[doc = _js_doc!(console "log")]
40    /// Outputs a message to the console.
41    pub fn log(text: &str) { unsafe { console_log(text.as_ptr(), text.len()); } }
42
43    #[doc = _js_doc!(console "trace")]
44    /// Outputs a stack trace.
45    pub fn trace() { console_trace(); }
46
47    #[doc = _js_doc!(console "warn")]
48    /// Outputs a message to the console with the warning log level.
49    pub fn warn(text: &str) { unsafe { console_warn(text.as_ptr(), text.len()); } }
50
51    //
52
53    #[doc = _js_doc!(console "count")]
54    /// Logs the number of times that this particular call to count has been called.
55    pub fn count(label: &str) { unsafe { console_count(label.as_ptr(), label.len()); } }
56
57    #[doc = _js_doc!(console "countReset")]
58    /// Resets the counter used with [`count`][Self::count].
59    pub fn count_reset(label: &str) {
60        unsafe { console_count_reset(label.as_ptr(), label.len()); } }
61
62    //
63
64    #[doc = _js_doc!(console "group")]
65    /// Creates a new inline group, indenting all following output by another level.
66    pub fn group(text: &str) { unsafe { console_group(text.as_ptr(), text.len()); } }
67
68    #[doc = _js_doc!(console "groupCollapsed")]
69    /// Like [`group`][Self::group] but starts with the inline group collapsed.
70    pub fn group_collapsed(text: &str) {
71        unsafe { console_group_collapsed(text.as_ptr(), text.len()); } }
72
73    #[doc = _js_doc!(console "groupEnd")]
74    /// Exits the current inline group.
75    pub fn group_end() { console_group_end(); }
76
77    //
78
79    #[doc = _js_doc!(console "time")]
80    /// Starts a timer with the given `name`.
81    pub fn time(name: &str) { unsafe { console_time(name.as_ptr(), name.len()); } }
82
83    #[doc = _js_doc!(console "timeEnd")]
84    /// Stops a timer with the given name, started with [`time_end`][Self::time_end].
85    pub fn time_end(name: &str) { unsafe { console_time_end(name.as_ptr(), name.len()); } }
86
87    #[doc = _js_doc!(console "timeLog")]
88    /// Logs a timer with the given name, started with [`time_log`][Self::time_log].
89    pub fn time_log(name: &str) { unsafe { console_time_log(name.as_ptr(), name.len()); } }
90}
91_js_extern! {
92    [ module: "api_console" ]
93    safe fn console_clear();
94    unsafe fn console_debug(str_ptr: *const u8, str_len: usize);
95    unsafe fn console_error(str_ptr: *const u8, str_len: usize);
96    unsafe fn console_info(str_ptr: *const u8, str_len: usize);
97    unsafe fn console_log(str_ptr: *const u8, str_len: usize);
98    safe fn console_trace();
99    unsafe fn console_warn(str_ptr: *const u8, str_len: usize);
100    //
101    unsafe fn console_count(str_ptr: *const u8, str_len: usize);
102    unsafe fn console_count_reset(str_ptr: *const u8, str_len: usize);
103    //
104    unsafe fn console_group(str_ptr: *const u8, str_len: usize);
105    unsafe fn console_group_collapsed(str_ptr: *const u8, str_len: usize);
106    safe fn console_group_end();
107    //
108    unsafe fn console_time(str_ptr: *const u8, str_len: usize);
109    unsafe fn console_time_end(str_ptr: *const u8, str_len: usize);
110    unsafe fn console_time_log(str_ptr: *const u8, str_len: usize);
111}