Add initial implementations for web-sys and stdweb
This commit is contained in:
parent
86e1a93cf7
commit
056c2ce276
|
@ -0,0 +1,2 @@
|
||||||
|
/target
|
||||||
|
Cargo.lock
|
|
@ -0,0 +1,25 @@
|
||||||
|
[package]
|
||||||
|
name = "weblog"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Rob Watson <rfwatson@users.noreply.github.com>"]
|
||||||
|
edition = "2018"
|
||||||
|
description = "weblog is a crate that defines a set of macros for calling `console.log()` and other members of the browser's console API when targeting Wasm."
|
||||||
|
repository = "https://github.com/rfwatson/weblog"
|
||||||
|
keywords = ["wasm", "webassembly", "console", "log", "logging"]
|
||||||
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
# FIXME: `cargo test` refuses to cross-compile doctests, even with `-Zdoctest-xcompile`.
|
||||||
|
# E.g.: `cargo test --target wasm32-unknown-unknown -Zdoctest-xcompile`
|
||||||
|
test = false
|
||||||
|
doctest = true
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = ["web_sys"]
|
||||||
|
web_sys = ["web-sys", "paste"]
|
||||||
|
std_web = ["stdweb"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
web-sys = { version = "*", optional = true, features = ["console"] }
|
||||||
|
stdweb = { version = "*", optional = true }
|
||||||
|
paste = { version = "1.0", optional = true }
|
|
@ -0,0 +1,2 @@
|
||||||
|
docs:
|
||||||
|
cargo doc --all --no-deps --target wasm32-unknown-unknown && cargo doc --open
|
|
@ -0,0 +1,38 @@
|
||||||
|
# Weblog
|
||||||
|
|
||||||
|
weblog is a crate that defines a set of macros for calling `console.log()`, `console.error()` and other members of the browser's console API when targeting Wasm.
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* Supports `web-sys` and `stdweb` backends with an identical public API
|
||||||
|
* Support for variadic arguments on all calls
|
||||||
|
* No stringification before sending to the browser - log entire objects and use the full introspective debugging power of the browser console.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```toml
|
||||||
|
# Defaults to web-sys
|
||||||
|
weblog = "0.1"
|
||||||
|
|
||||||
|
# For stdweb:
|
||||||
|
weblog = { version = "0.1", default-features = false, features = ["std_web"] }
|
||||||
|
```
|
||||||
|
|
||||||
|
See the documentation for usage examples.
|
||||||
|
|
||||||
|
The crate currently exposes the following macros:
|
||||||
|
|
||||||
|
* `console_clear!`
|
||||||
|
* `console_debug!`
|
||||||
|
* `console_dir!`
|
||||||
|
* `console_dirxml!`
|
||||||
|
* `console_error!`
|
||||||
|
* `console_info!`
|
||||||
|
* `console_log!`
|
||||||
|
* `console_trace!`
|
||||||
|
* `console_warn!`
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Licensed under MIT or Apache-2.
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
#[cfg(feature = "web_sys")]
|
||||||
|
pub mod web_sys;
|
||||||
|
|
||||||
|
#[cfg(feature = "std_web")]
|
||||||
|
pub mod std_web;
|
|
@ -0,0 +1,74 @@
|
||||||
|
pub extern crate stdweb;
|
||||||
|
pub use stdweb::js;
|
||||||
|
|
||||||
|
#[doc = "Call the browser's `console.debug()` function."]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! console_debug {
|
||||||
|
($( $item:expr ),* ) => {{
|
||||||
|
$crate::stdweb::js! { console.debug($( @{$item} ),*) }
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc = "Call the browser's `console.clear()` function."]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! console_clear {
|
||||||
|
($item:expr) => {{
|
||||||
|
$crate::stdweb::js! { console.clear() }
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc = "Call the browser's `console.dir()` function."]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! console_dir {
|
||||||
|
($( $item:expr ),* ) => {{
|
||||||
|
$crate::stdweb::js! { console.dir($( @{$item} ),*) }
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc = "Call the browser's `console.dirxml()` function."]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! console_dirxml {
|
||||||
|
($( $item:expr ),* ) => {{
|
||||||
|
$crate::stdweb::js! { console.dirxml($( @{$item} ),*) }
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc = "Call the browser's `console.error()` function."]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! console_error {
|
||||||
|
($( $item:expr ),* ) => {{
|
||||||
|
$crate::stdweb::js! { console.error($( @{$item} ),*) }
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc = "Call the browser's `console.info()` function."]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! console_info {
|
||||||
|
($( $item:expr ),* ) => {{
|
||||||
|
$crate::stdweb::js! { console.info($( @{$item} ),*) }
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc = "Call the browser's `console.log()` function."]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! console_log {
|
||||||
|
($( $item:expr ),* ) => {{
|
||||||
|
$crate::stdweb::js! { console.log($( @{$item} ),*) }
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc = "Call the browser's `console.trace()` function."]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! console_trace {
|
||||||
|
($( $item:expr ),* ) => {{
|
||||||
|
$crate::stdweb::js! { console.trace($( @{$item} ),*) }
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc = "Call the browser's `console.warn()` function."]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! console_warn {
|
||||||
|
($( $item:expr ),* ) => {{
|
||||||
|
$crate::stdweb::js! { console.warn($( @{$item} ),*) }
|
||||||
|
}};
|
||||||
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
#[doc(hidden)]
|
||||||
|
pub extern crate web_sys;
|
||||||
|
|
||||||
|
use paste::paste;
|
||||||
|
|
||||||
|
macro_rules! websys_rules {
|
||||||
|
($level:ident) => {
|
||||||
|
paste! {
|
||||||
|
#[doc = "Call the browser's `console." $level "()` function.\n\n\
|
||||||
|
The web-sys crate accepts up to a maximum of seven arguments, all of which must implement `Into<JsValue>`.\n\n\
|
||||||
|
See the [wasm-bindgen documentation](../wasm_bindgen/struct.JsValue.html) for more information."]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! [<console_ $level>] {
|
||||||
|
() => {
|
||||||
|
$crate::web_sys::console::[<$level _0>]()
|
||||||
|
};
|
||||||
|
($a:expr) => {
|
||||||
|
$crate::web_sys::console::[<$level _1>](&$a.into())
|
||||||
|
};
|
||||||
|
($a:expr, $b:expr) => {
|
||||||
|
$crate::web_sys::console::[<$level _2>](&$a.into(), &$b.into())
|
||||||
|
};
|
||||||
|
($a:expr, $b:expr, $c:expr) => {
|
||||||
|
$crate::web_sys::console::[<$level _3>](&$a.into(), &$b.into(), &$c.into())
|
||||||
|
};
|
||||||
|
($a:expr, $b:expr, $c:expr, $d:expr) => {
|
||||||
|
$crate::web_sys::console::[<$level _4>](&$a.into(), &$b.into(), &$c.into(), &$d.into())
|
||||||
|
};
|
||||||
|
($a:expr, $b:expr, $c:expr, $d:expr, $e:expr) => {
|
||||||
|
$crate::web_sys::console::[<$level _5>](
|
||||||
|
&$a.into(),
|
||||||
|
&$b.into(),
|
||||||
|
&$c.into(),
|
||||||
|
&$d.into(),
|
||||||
|
&$e.into(),
|
||||||
|
)
|
||||||
|
};
|
||||||
|
($a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr) => {
|
||||||
|
$crate::web_sys::console::[<$level _6>](
|
||||||
|
&$a.into(),
|
||||||
|
&$b.into(),
|
||||||
|
&$c.into(),
|
||||||
|
&$d.into(),
|
||||||
|
&$e.into(),
|
||||||
|
&$f.into(),
|
||||||
|
)
|
||||||
|
};
|
||||||
|
($a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr) => {
|
||||||
|
$crate::web_sys::console::[<$level _7>](
|
||||||
|
&$a.into(),
|
||||||
|
&$b.into(),
|
||||||
|
&$c.into(),
|
||||||
|
&$d.into(),
|
||||||
|
&$e.into(),
|
||||||
|
&$f.into(),
|
||||||
|
&$g.into(),
|
||||||
|
)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
websys_rules!(debug);
|
||||||
|
websys_rules!(dir);
|
||||||
|
websys_rules!(dirxml);
|
||||||
|
websys_rules!(error);
|
||||||
|
websys_rules!(info);
|
||||||
|
websys_rules!(log);
|
||||||
|
websys_rules!(trace);
|
||||||
|
websys_rules!(warn);
|
||||||
|
|
||||||
|
#[doc = "Call the browser's `console.clear()` function."]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! console_clear {
|
||||||
|
() => {
|
||||||
|
$crate::web_sys::console::clear()
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,83 @@
|
||||||
|
//! weblog is a crate that defines a set of macros for calling `console.log()`, `console.error()`
|
||||||
|
//! and other members of the browser's console API when targeting Wasm.
|
||||||
|
//!
|
||||||
|
//! # Features
|
||||||
|
//!
|
||||||
|
//! * Supports `web-sys` and `stdweb` backends with an identical public API
|
||||||
|
//! * Support for variadic arguments on all calls
|
||||||
|
//! * No stringification before sending to the browser - log entire objects and use the full
|
||||||
|
//! introspective debugging power of the browser console.
|
||||||
|
//!
|
||||||
|
//! # Examples
|
||||||
|
//!
|
||||||
|
//! A simple example.
|
||||||
|
//!
|
||||||
|
//! ```
|
||||||
|
//! # #[macro_use] extern crate weblog;
|
||||||
|
//! # fn main() {
|
||||||
|
//! console_log!("Hello world!");
|
||||||
|
//! # }
|
||||||
|
//! ```
|
||||||
|
//! Passing multiple arguments is fine too.
|
||||||
|
//!
|
||||||
|
//! ```
|
||||||
|
//! # #[macro_use] extern crate weblog;
|
||||||
|
//! # fn main() {
|
||||||
|
//! console_log!("Foo", "bar", "baz");
|
||||||
|
//! # }
|
||||||
|
//! ```
|
||||||
|
//! All of the common browser log levels are supported.
|
||||||
|
//!
|
||||||
|
//! ```
|
||||||
|
//! # #[macro_use] extern crate weblog;
|
||||||
|
//! # fn main() {
|
||||||
|
//! console_debug!("Just testing...");
|
||||||
|
//! console_warn!("...but then...");
|
||||||
|
//! console_error!("...something bad happened.");
|
||||||
|
//! # }
|
||||||
|
//! ```
|
||||||
|
//! It's possible to send more than just strings or `&str`s:
|
||||||
|
//!
|
||||||
|
//! ```
|
||||||
|
//! # #[macro_use] extern crate weblog;
|
||||||
|
//! # fn main() {
|
||||||
|
//! console_log!(
|
||||||
|
//! "&str",
|
||||||
|
//! "string".to_string(),
|
||||||
|
//! 1,
|
||||||
|
//! 2.0,
|
||||||
|
//! 3f32,
|
||||||
|
//! true,
|
||||||
|
//! false
|
||||||
|
//! );
|
||||||
|
//! # }
|
||||||
|
//! ```
|
||||||
|
//! When using `web-sys` crate the macros accept any value that implements the `Into<JsValue>` trait. See [JsValue](https://rustwasm.github.io/wasm-bindgen/api/wasm_bindgen/struct.JsValue.html) for
|
||||||
|
//! more details.
|
||||||
|
//!
|
||||||
|
//! No stringification is performed on the Rust side - so objects will be fully introspectable in
|
||||||
|
//! the browser's console!
|
||||||
|
//!
|
||||||
|
//! # Usage
|
||||||
|
//!
|
||||||
|
//! By default, the crate assumes the presence of the `web-sys` crate.
|
||||||
|
//!
|
||||||
|
//! ```toml
|
||||||
|
//! weblog = "0.1"
|
||||||
|
//! ```
|
||||||
|
//!
|
||||||
|
//!
|
||||||
|
//! If you'd prefer to use it
|
||||||
|
//! with `stdweb`, enable the feature in `Cargo.toml`:
|
||||||
|
//!
|
||||||
|
//! ```toml
|
||||||
|
//! weblog = { version = "0.1", default-features = false, features = ["stdweb"] }
|
||||||
|
//! ```
|
||||||
|
//!
|
||||||
|
mod console;
|
||||||
|
|
||||||
|
#[cfg(feature = "web_sys")]
|
||||||
|
pub use self::console::web_sys::*;
|
||||||
|
|
||||||
|
#[cfg(feature = "std_web")]
|
||||||
|
pub use self::console::std_web::*;
|
Loading…
Reference in New Issue