mirror of
https://github.com/fluencelabs/marine-rs-sdk
synced 2025-03-15 14:30:48 +00:00
use directives instead of map
This commit is contained in:
parent
4cf3291323
commit
947d2047fb
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "fluence"
|
name = "fluence"
|
||||||
version = "0.4.1" # remember to update html_root_url
|
version = "0.4.2" # remember to update html_root_url
|
||||||
description = "Fluence backend SDK for developing backend applications for the Fluence network"
|
description = "Fluence backend SDK for developing backend applications for the Fluence network"
|
||||||
documentation = "https://docs.rs/fluence/"
|
documentation = "https://docs.rs/fluence/"
|
||||||
repository = "https://github.com/fluencelabs/rust-sdk"
|
repository = "https://github.com/fluencelabs/rust-sdk"
|
||||||
@ -18,8 +18,8 @@ all-features = true
|
|||||||
path = "src/lib.rs"
|
path = "src/lib.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
fluence-sdk-macro = { path = "crates/macro", version = "=0.4.1" }
|
fluence-sdk-macro = { path = "crates/macro", version = "=0.4.2" }
|
||||||
fluence-sdk-main = { path = "crates/main", version = "=0.4.1" }
|
fluence-sdk-main = { path = "crates/main", version = "=0.4.2" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
# Print some internal logs by log_utf8_string
|
# Print some internal logs by log_utf8_string
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "fluence-sdk-macro"
|
name = "fluence-sdk-macro"
|
||||||
version = "0.4.1" # remember to update html_root_url
|
version = "0.4.2" # remember to update html_root_url
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Definition of `#[invoke_handler]` attribute"
|
description = "Definition of `#[invoke_handler]` attribute"
|
||||||
documentation = "https://docs.rs/fluence/fluence-sdk-macro"
|
documentation = "https://docs.rs/fluence/fluence-sdk-macro"
|
||||||
@ -17,4 +17,4 @@ all-features = true
|
|||||||
proc-macro = true
|
proc-macro = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
fluence-sdk-wit = { path = "../wit", version = "=0.4.1" }
|
fluence-sdk-wit = { path = "../wit", version = "=0.4.2" }
|
||||||
|
@ -54,7 +54,7 @@
|
|||||||
//!
|
//!
|
||||||
//! ```
|
//! ```
|
||||||
|
|
||||||
#![doc(html_root_url = "https://docs.rs/fluence-sdk-macro/0.4.1")]
|
#![doc(html_root_url = "https://docs.rs/fluence-sdk-macro/0.4.2")]
|
||||||
#![deny(
|
#![deny(
|
||||||
dead_code,
|
dead_code,
|
||||||
nonstandard_style,
|
nonstandard_style,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "fluence-sdk-main"
|
name = "fluence-sdk-main"
|
||||||
version = "0.4.1" # remember to update html_root_url
|
version = "0.4.2" # remember to update html_root_url
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Rust SDK for applications for the Fluence network"
|
description = "Rust SDK for applications for the Fluence network"
|
||||||
documentation = "https://docs.rs/fluence/fluence-sdk-macro"
|
documentation = "https://docs.rs/fluence/fluence-sdk-macro"
|
||||||
@ -18,7 +18,7 @@ path = "src/lib.rs"
|
|||||||
crate-type = ["rlib"]
|
crate-type = ["rlib"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
fluence-sdk-macro = { path = "../macro", version = "=0.4.1" }
|
fluence-sdk-macro = { path = "../macro", version = "=0.4.2" }
|
||||||
|
|
||||||
log = { version = "0.4.8", features = ["std"] }
|
log = { version = "0.4.8", features = ["std"] }
|
||||||
serde = "=1.0.118"
|
serde = "=1.0.118"
|
||||||
@ -26,7 +26,6 @@ serde = "=1.0.118"
|
|||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
simple_logger = "1.6.0" # used in doc test
|
simple_logger = "1.6.0" # used in doc test
|
||||||
lazy_static = "1.4.0" # used in doc test
|
lazy_static = "1.4.0" # used in doc test
|
||||||
maplit = "1.0.2"
|
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
# Print some internal logs by log_utf8_string
|
# Print some internal logs by log_utf8_string
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
#![allow(clippy::missing_safety_doc)]
|
#![allow(clippy::missing_safety_doc)]
|
||||||
#![allow(clippy::needless_doctest_main)]
|
#![allow(clippy::needless_doctest_main)]
|
||||||
#![doc(html_root_url = "https://docs.rs/fluence-sdk-main/0.4.1")]
|
#![doc(html_root_url = "https://docs.rs/fluence-sdk-main/0.4.2")]
|
||||||
#![deny(
|
#![deny(
|
||||||
dead_code,
|
dead_code,
|
||||||
nonstandard_style,
|
nonstandard_style,
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
//! This example initializes [`WasmLogger`] with setting log level.
|
//! This example initializes [`WasmLogger`] with setting log level.
|
||||||
//! Macros from crate [`log`] are used as a logging facade.
|
//! Macros from crate [`log`] are used as a logging facade.
|
||||||
//!
|
//!
|
||||||
//! ```
|
//! ```ignore
|
||||||
//! use fluence::logger;
|
//! use fluence::logger;
|
||||||
//! use log::{error, trace};
|
//! use log::{error, trace};
|
||||||
//! use simple_logger;
|
//! use simple_logger;
|
||||||
@ -57,8 +57,18 @@ const WASM_DEFAULT_LOG_LEVEL: LevelFilter = LevelFilter::Info;
|
|||||||
/// isn't marked as #[wasm_bindgen]. In result, TS/JS code throws 'TypeError' on every log.
|
/// isn't marked as #[wasm_bindgen]. In result, TS/JS code throws 'TypeError' on every log.
|
||||||
pub type TargetMap = HashMap<&'static str, i32>;
|
pub type TargetMap = HashMap<&'static str, i32>;
|
||||||
|
|
||||||
/// Mapping from module name to their log levels.
|
/// This structure is used to save information about particular log level for a particular module.
|
||||||
type ModuleMap = HashMap<String, LevelFilter>;
|
#[derive(Debug)]
|
||||||
|
struct LogDirective {
|
||||||
|
module_name: String,
|
||||||
|
level: LevelFilter,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl LogDirective {
|
||||||
|
pub fn new(module_name: String, level: LevelFilter) -> Self {
|
||||||
|
Self { module_name, level }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// The Wasm Logger.
|
/// The Wasm Logger.
|
||||||
///
|
///
|
||||||
@ -72,7 +82,7 @@ type ModuleMap = HashMap<String, LevelFilter>;
|
|||||||
/// [`Log`]: https://docs.rs/log/0.4.11/log/trait.Log.html
|
/// [`Log`]: https://docs.rs/log/0.4.11/log/trait.Log.html
|
||||||
struct WasmLogger {
|
struct WasmLogger {
|
||||||
target_map: TargetMap,
|
target_map: TargetMap,
|
||||||
modules_level: ModuleMap,
|
modules_directives: Vec<LogDirective>,
|
||||||
default_log_level: LevelFilter,
|
default_log_level: LevelFilter,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,7 +107,7 @@ impl WasmLoggerBuilder {
|
|||||||
|
|
||||||
let wasm_logger = WasmLogger {
|
let wasm_logger = WasmLogger {
|
||||||
target_map: HashMap::new(),
|
target_map: HashMap::new(),
|
||||||
modules_level: HashMap::new(),
|
modules_directives: Vec::new(),
|
||||||
default_log_level,
|
default_log_level,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -118,9 +128,10 @@ impl WasmLoggerBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn filter(mut self, module_name: impl Into<String>, level: LevelFilter) -> Self {
|
pub fn filter(mut self, module_name: impl Into<String>, level: LevelFilter) -> Self {
|
||||||
self.wasm_logger
|
let module_name = module_name.into();
|
||||||
.modules_level
|
let log_directive = LogDirective::new(module_name, level);
|
||||||
.insert(module_name.into(), level);
|
|
||||||
|
self.wasm_logger.modules_directives.push(log_directive);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,7 +140,7 @@ impl WasmLoggerBuilder {
|
|||||||
/// This method is a last one in this builder chain and MUST be called to set logger up.
|
/// This method is a last one in this builder chain and MUST be called to set logger up.
|
||||||
/// Returns a error
|
/// Returns a error
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```ignore
|
||||||
/// # use fluence::logger;
|
/// # use fluence::logger;
|
||||||
/// # use log::info;
|
/// # use log::info;
|
||||||
/// #
|
/// #
|
||||||
@ -141,8 +152,9 @@ impl WasmLoggerBuilder {
|
|||||||
/// .unwrap();
|
/// .unwrap();
|
||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
pub fn build(self) -> Result<(), log::SetLoggerError> {
|
pub fn build(mut self) -> Result<(), log::SetLoggerError> {
|
||||||
let max_level = self.max_log_level();
|
let max_level = self.max_log_level();
|
||||||
|
self.sort_directives();
|
||||||
|
|
||||||
let Self { wasm_logger } = self;
|
let Self { wasm_logger } = self;
|
||||||
|
|
||||||
@ -151,13 +163,23 @@ impl WasmLoggerBuilder {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Sort supplied directive ny length of module names to make more efficient lookup at runtime.
|
||||||
|
fn sort_directives(&mut self) {
|
||||||
|
self.wasm_logger.modules_directives.sort_by(|l, r| {
|
||||||
|
let llen = l.module_name.len();
|
||||||
|
let rlen = r.module_name.len();
|
||||||
|
|
||||||
|
rlen.cmp(&llen)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
fn max_log_level(&self) -> log::LevelFilter {
|
fn max_log_level(&self) -> log::LevelFilter {
|
||||||
let default_level = self.wasm_logger.default_log_level;
|
let default_level = self.wasm_logger.default_log_level;
|
||||||
let max_filter_level = self
|
let max_filter_level = self
|
||||||
.wasm_logger
|
.wasm_logger
|
||||||
.modules_level
|
.modules_directives
|
||||||
.iter()
|
.iter()
|
||||||
.map(|(_, &level)| level)
|
.map(|d| d.level)
|
||||||
.max()
|
.max()
|
||||||
.unwrap_or(LevelFilter::Off);
|
.unwrap_or(LevelFilter::Off);
|
||||||
|
|
||||||
@ -168,12 +190,15 @@ impl WasmLoggerBuilder {
|
|||||||
impl log::Log for WasmLogger {
|
impl log::Log for WasmLogger {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn enabled(&self, metadata: &log::Metadata<'_>) -> bool {
|
fn enabled(&self, metadata: &log::Metadata<'_>) -> bool {
|
||||||
let allowed_level = match self.modules_level.get(metadata.target()) {
|
let target = metadata.target();
|
||||||
Some(allowed_level) => allowed_level,
|
|
||||||
None => &self.default_log_level,
|
|
||||||
};
|
|
||||||
|
|
||||||
metadata.level() <= *allowed_level
|
for directive in self.modules_directives.iter() {
|
||||||
|
if target.starts_with(&directive.module_name) {
|
||||||
|
return metadata.level() <= directive.level;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
metadata.level() <= self.default_log_level
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
@ -238,6 +263,8 @@ fn level_from_i32(level: i32) -> log::Level {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::WasmLogger;
|
use super::WasmLogger;
|
||||||
|
use super::LogDirective;
|
||||||
|
use super::WasmLoggerBuilder;
|
||||||
use log::LevelFilter;
|
use log::LevelFilter;
|
||||||
use log::Log;
|
use log::Log;
|
||||||
|
|
||||||
@ -255,14 +282,14 @@ mod tests {
|
|||||||
let module_1_name = "module_1";
|
let module_1_name = "module_1";
|
||||||
let module_2_name = "module_2";
|
let module_2_name = "module_2";
|
||||||
|
|
||||||
let modules_level = maplit::hashmap!(
|
let modules_directives = vec![
|
||||||
module_1_name.to_string() => LevelFilter::Info,
|
LogDirective::new(module_1_name.to_string(), LevelFilter::Info),
|
||||||
module_2_name.to_string() => LevelFilter::Warn,
|
LogDirective::new(module_2_name.to_string(), LevelFilter::Warn),
|
||||||
);
|
];
|
||||||
|
|
||||||
let logger = WasmLogger {
|
let logger = WasmLogger {
|
||||||
target_map: HashMap::new(),
|
target_map: HashMap::new(),
|
||||||
modules_level,
|
modules_directives,
|
||||||
default_log_level: LevelFilter::Error,
|
default_log_level: LevelFilter::Error,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -284,13 +311,11 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn default_log_level() {
|
fn default_log_level() {
|
||||||
let modules_level = maplit::hashmap!(
|
let modules_directives = vec![LogDirective::new("module_1".to_string(), LevelFilter::Info)];
|
||||||
"module_1".to_string() => LevelFilter::Info,
|
|
||||||
);
|
|
||||||
|
|
||||||
let logger = WasmLogger {
|
let logger = WasmLogger {
|
||||||
target_map: HashMap::new(),
|
target_map: HashMap::new(),
|
||||||
modules_level,
|
modules_directives,
|
||||||
default_log_level: LevelFilter::Warn,
|
default_log_level: LevelFilter::Warn,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -301,4 +326,24 @@ mod tests {
|
|||||||
let not_allowed_metadata = create_metadata(module_name, log::Level::Info);
|
let not_allowed_metadata = create_metadata(module_name, log::Level::Info);
|
||||||
assert!(!logger.enabled(¬_allowed_metadata));
|
assert!(!logger.enabled(¬_allowed_metadata));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn longest_directive_first() {
|
||||||
|
let module_1_name = "module_1";
|
||||||
|
let module_2_name = "module_1::some_name::func_name";
|
||||||
|
|
||||||
|
WasmLoggerBuilder::new()
|
||||||
|
.filter(module_1_name, LevelFilter::Info)
|
||||||
|
.filter(module_2_name, LevelFilter::Warn)
|
||||||
|
.build()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let logger = log::logger();
|
||||||
|
|
||||||
|
let allowed_metadata = create_metadata(module_1_name, log::Level::Info);
|
||||||
|
assert!(logger.enabled(&allowed_metadata));
|
||||||
|
|
||||||
|
let not_allowed_metadata = create_metadata(module_2_name, log::Level::Info);
|
||||||
|
assert!(!logger.enabled(¬_allowed_metadata));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "fluence-sdk-wit"
|
name = "fluence-sdk-wit"
|
||||||
version = "0.4.1" # remember to update html_root_url
|
version = "0.4.2" # remember to update html_root_url
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Webassembly interface-types generator"
|
description = "Webassembly interface-types generator"
|
||||||
documentation = "https://docs.rs/fluence/fluence-sdk-macro"
|
documentation = "https://docs.rs/fluence/fluence-sdk-macro"
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#![doc(html_root_url = "https://docs.rs/wit-support/0.4.1")]
|
#![doc(html_root_url = "https://docs.rs/wit-support/0.4.2")]
|
||||||
#![deny(
|
#![deny(
|
||||||
dead_code,
|
dead_code,
|
||||||
nonstandard_style,
|
nonstandard_style,
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
//! pub fn curl_get(url: String) -> String;
|
//! pub fn curl_get(url: String) -> String;
|
||||||
//! }
|
//! }
|
||||||
//! ```
|
//! ```
|
||||||
#![doc(html_root_url = "https://docs.rs/fluence/0.4.1")]
|
#![doc(html_root_url = "https://docs.rs/fluence/0.4.2")]
|
||||||
#![deny(
|
#![deny(
|
||||||
dead_code,
|
dead_code,
|
||||||
nonstandard_style,
|
nonstandard_style,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user