yew_stdweb/services/
console.rs

1//! This module contains a service implementation to use browser's console.
2
3use cfg_if::cfg_if;
4use cfg_match::cfg_match;
5cfg_if! {
6    if #[cfg(feature = "std_web")] {
7        #[allow(unused_imports)]
8        use stdweb::{_js_impl, js};
9    } else if #[cfg(feature = "web_sys")] {
10        use wasm_bindgen::JsValue;
11        use web_sys::console;
12    }
13}
14
15/// A service to use methods of a
16/// [Console](https://developer.mozilla.org/en-US/docs/Web/API/Console).
17#[derive(Default, Debug)]
18pub struct ConsoleService {}
19
20impl ConsoleService {
21    /// [console.log](https://developer.mozilla.org/en-US/docs/Web/API/Console/log)
22    /// method implementation.
23    /// This method outputs the provided message to the console.
24    pub fn log(message: &str) {
25        cfg_match! {
26            feature = "std_web" => js! { @(no_return) console.log(@{message}); },
27            feature = "web_sys" => console::log_1(&JsValue::from_str(message)),
28        };
29    }
30
31    /// [console.warn](https://developer.mozilla.org/en-US/docs/Web/API/Console/warn)
32    /// method implementation.
33    /// This method outputs the provided message to the console as a warning.
34    pub fn warn(message: &str) {
35        cfg_match! {
36            feature = "std_web" => js! { @(no_return) console.warn(@{message}); },
37            feature = "web_sys" => console::warn_1(&JsValue::from_str(message)),
38        };
39    }
40
41    /// [console.info](https://developer.mozilla.org/en-US/docs/Web/API/Console/info)
42    /// method implementation.
43    /// This method outputs the provided message to the console as information.
44    pub fn info(message: &str) {
45        cfg_match! {
46            feature = "std_web" => js! { @(no_return) console.info(@{message}); },
47            feature = "web_sys" => console::info_1(&JsValue::from_str(message)),
48        };
49    }
50
51    /// [console.error](https://developer.mozilla.org/en-US/docs/Web/API/Console/error)
52    /// method implementation.
53    /// This method outputs the provided message to the console as an error.
54    pub fn error(message: &str) {
55        cfg_match! {
56            feature = "std_web" => js! { @(no_return) console.error(@{message}); },
57            feature = "web_sys" => console::error_1(&JsValue::from_str(message)),
58        };
59    }
60
61    /// [console.debug](https://developer.mozilla.org/en-US/docs/Web/API/Console/debug)
62    /// method implementation.
63    pub fn debug(message: &str) {
64        cfg_match! {
65            feature = "std_web" => js! { @(no_return) console.debug(@{message}); },
66            feature = "web_sys" => console::debug_1(&JsValue::from_str(message)),
67        };
68    }
69
70    /// [console.count_named](https://developer.mozilla.org/en-US/docs/Web/API/Console/count_named)
71    /// method implementation.
72    pub fn count_named(name: &str) {
73        cfg_match! {
74            feature = "std_web" => js! { @(no_return) console.count(@{name}); },
75            feature = "web_sys" => console::count_with_label(name),
76        };
77    }
78
79    /// [console.count](https://developer.mozilla.org/en-US/docs/Web/API/Console/count)
80    /// method implementation.
81    pub fn count() {
82        cfg_match! {
83            feature = "std_web" => js! { @(no_return) console.count(); },
84            feature = "web_sys" => console::count(),
85        };
86    }
87
88    /// [console.time_named](https://developer.mozilla.org/en-US/docs/Web/API/Console/time_named)
89    /// method implementation.
90    pub fn time_named(name: &str) {
91        cfg_match! {
92            feature = "std_web" => js! { @(no_return) console.time(@{name}); },
93            feature = "web_sys" => console::time_with_label(name),
94        };
95    }
96
97    /// [console.time_named_end](https://developer.mozilla.org/en-US/docs/Web/API/Console/time_named_end)
98    /// method implementation.
99    pub fn time_named_end(name: &str) {
100        cfg_match! {
101            feature = "std_web" => js! { @(no_return) console.timeEnd(@{name}); },
102            feature = "web_sys" => console::time_end_with_label(name),
103        };
104    }
105
106    /// [console.time](https://developer.mozilla.org/en-US/docs/Web/API/Console/time)
107    /// method implementation.
108    pub fn time() {
109        cfg_match! {
110            feature = "std_web" => js! { @(no_return) console.time(); },
111            feature = "web_sys" => console::time(),
112        };
113    }
114    /// [console.time_end](https://developer.mozilla.org/en-US/docs/Web/API/Console/time_end)
115    /// method implementation.
116    pub fn time_end() {
117        cfg_match! {
118            feature = "std_web" => js! { @(no_return) console.timeEnd(); },
119            feature = "web_sys" => console::time_end(),
120        };
121    }
122
123    /// [console.clear](https://developer.mozilla.org/en-US/docs/Web/API/Console/clear)
124    /// method implementation.
125    pub fn clear() {
126        cfg_match! {
127            feature = "std_web" => js! { @(no_return) console.clear(); },
128            feature = "web_sys" => console::clear(),
129        };
130    }
131
132    /// [console.group](https://developer.mozilla.org/en-US/docs/Web/API/Console/group)
133    /// method implementation.
134    pub fn group() {
135        cfg_match! {
136            feature = "std_web" => js! { @(no_return) console.group(); },
137            feature = "web_sys" => console::group_0(),
138        };
139    }
140
141    /// [console.group_collapsed](https://developer.mozilla.org/en-US/docs/Web/API/Console/group_collapsed)
142    /// method implementation.
143    pub fn group_collapsed() {
144        cfg_match! {
145            feature = "std_web" => js! { @(no_return) console.groupCollapsed(); },
146            feature = "web_sys" => console::group_collapsed_0(),
147        };
148    }
149
150    /// [console.group_end](https://developer.mozilla.org/en-US/docs/Web/API/Console/group_end)
151    /// method implementation.
152    pub fn group_end() {
153        cfg_match! {
154            feature = "std_web" => js! { @(no_return) console.groupEnd(); },
155            feature = "web_sys" => console::group_end(),
156        };
157    }
158
159    /// [console.trace](https://developer.mozilla.org/en-US/docs/Web/API/Console/trace)
160    /// method implementation.
161    /// This method outputs the current stack trace to the console.
162    pub fn trace() {
163        cfg_match! {
164            feature = "std_web" => js! { @(no_return) console.trace(); },
165            feature = "web_sys" => console::trace_0(),
166        };
167    }
168
169    /// [console.assert](https://developer.mozilla.org/en-US/docs/Web/API/Console/assert)
170    /// method implementation.
171    pub fn assert(condition: bool, message: &str) {
172        cfg_match! {
173            feature = "std_web" => js! { @(no_return) console.assert(@{condition}, @{message}); },
174            feature = "web_sys" => console::assert_with_condition_and_data_1(condition, &String::from(message).into()),
175        };
176    }
177}