Skip to content

Commit

Permalink
Removed dependency over bp3d-logger
Browse files Browse the repository at this point in the history
  • Loading branch information
Yuri6037 committed Jul 20, 2024
1 parent b85d06e commit 8c688bb
Show file tree
Hide file tree
Showing 11 changed files with 198 additions and 22 deletions.
6 changes: 0 additions & 6 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,3 @@ keywords = ["bp3d", "tracing"]
categories = ["development-tools", "development-tools::debugging", "development-tools::profiling"]

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
bp3d-logger = "2.0.0-rc.2.1.0"

[build-dependencies]
semver = "1.0.7"
1 change: 1 addition & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,4 @@ pub mod field;
pub mod logger;
pub mod profiler;
pub mod trace;
pub mod util;
5 changes: 3 additions & 2 deletions src/logger/interface.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

use crate::field::Field;
use bp3d_logger::{Level, Location};
use crate::logger::Level;
use crate::util::Location;
use std::fmt::Arguments;

pub struct Callsite {
Expand Down Expand Up @@ -56,7 +57,7 @@ pub trait Logger {
#[cfg(test)]
mod tests {
use crate::{log, trace};
use bp3d_logger::Level;
use crate::logger::Level;

#[test]
fn api_test() {
Expand Down
79 changes: 79 additions & 0 deletions src/logger/level.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
// Copyright (c) 2024, BlockProject 3D
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
// * Neither the name of BlockProject 3D nor the names of its contributors
// may be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

use std::fmt::{Display, Formatter};

/// An enum representing the available verbosity levels for a message.
#[repr(u8)]
#[derive(Clone, PartialEq, Copy, Ord, PartialOrd, Eq, Debug, Hash)]
pub enum Level {
/// The "trace" level.
///
/// Designates very low priority, often extremely verbose, information.
Trace = 1,

/// The "debug" level.
///
/// Designates lower priority information.
Debug = 2,

/// The "info" level.
///
/// Designates useful information.
Info = 3,

/// The "warn" level.
///
/// Designates hazardous situations.
Warn = 4,

/// The "error" level.
///
/// Designates very serious errors.
// This way these line up with the discriminants for LevelFilter below
// This works because Rust treats field-less enums the same way as C does:
// https://doc.rust-lang.org/reference/items/enumerations.html#custom-discriminant-values-for-field-less-enumerations
Error = 5,
}

static LOG_LEVEL_NAMES: [&str; 6] = ["OFF", "TRACE", "DEBUG", "INFO", "WARNING", "ERROR"];

impl Level {
/// Returns the string representation of the `Level`.
///
/// This returns the same string as the `fmt::Display` implementation.
pub fn as_str(&self) -> &'static str {
LOG_LEVEL_NAMES[*self as usize]
}
}

impl Display for Level {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
f.write_str(self.as_str())
}
}
14 changes: 7 additions & 7 deletions src/logger/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@
macro_rules! log {
($level: expr, $({$($field: tt)*})*, $msg: literal $(,$($args: tt)*)?) => {
{
static _CALLSITE: $crate::logger::Callsite = $crate::logger::Callsite::new(bp3d_logger::location!(), $level);
static _CALLSITE: $crate::logger::Callsite = $crate::logger::Callsite::new($crate::location!(), $level);
$crate::engine::get().log(&_CALLSITE, format_args!($msg $(, $($args),*)?), &[$($crate::field!($($field)*),)*]);
}
};
($level: expr, $msg: literal $(,$($args: tt)*)?) => {
{
static _CALLSITE: $crate::logger::Callsite = $crate::logger::Callsite::new(bp3d_logger::location!(), $level);
static _CALLSITE: $crate::logger::Callsite = $crate::logger::Callsite::new($crate::location!(), $level);
$crate::engine::get().log(&_CALLSITE, format_args!($msg $(, $($args),*)?), &[]);
}
};
Expand All @@ -46,34 +46,34 @@ macro_rules! log {
macro_rules! trace {
($($args: tt)*) => {
#[cfg(debug_assertions)]
$crate::log!(bp3d_logger::Level::Trace, $($args)*);
$crate::log!($crate::logger::Level::Trace, $($args)*);
};
}

#[macro_export]
macro_rules! debug {
($($args: tt)*) => {
$crate::log!(bp3d_logger::Level::Debug, $($args)*);
$crate::log!($crate::logger::Level::Debug, $($args)*);
};
}

#[macro_export]
macro_rules! info {
($($args: tt)*) => {
$crate::log!(bp3d_logger::Level::Info, $($args)*);
$crate::log!($crate::logger::Level::Info, $($args)*);
};
}

#[macro_export]
macro_rules! warning {
($($args: tt)*) => {
$crate::log!(bp3d_logger::Level::Warn, $($args)*);
$crate::log!($crate::logger::Level::Warn, $($args)*);
};
}

#[macro_export]
macro_rules! error {
($($args: tt)*) => {
$crate::log!(bp3d_logger::Level::Error, $($args)*);
$crate::log!($crate::logger::Level::Error, $($args)*);
};
}
2 changes: 2 additions & 0 deletions src/logger/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

mod interface;
mod level;
pub mod macros;

pub use interface::*;
pub use level::Level;
4 changes: 2 additions & 2 deletions src/profiler/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,12 @@
#[macro_export]
macro_rules! profiler_section_start {
($name: ident $(: $parent: ident)?, $level: expr, $({$($field: tt)*})*) => {
static $name: $crate::profiler::section::Section = $crate::profiler::section::Section::new(stringify!($name), bp3d_logger::location!(), $level)
static $name: $crate::profiler::section::Section = $crate::profiler::section::Section::new(stringify!($name), $crate::location!(), $level)
$(.set_parent(&$parent))?;
let _section = $name.enter($crate::field::FieldSet::new([$($crate::field!($($field)*),)*]));
};
($name: ident $(: $parent: ident)?, $level: expr) => {
static $name: $crate::profiler::section::Section = $crate::profiler::section::Section::new(stringify!($name), bp3d_logger::location!(), $level)
static $name: $crate::profiler::section::Section = $crate::profiler::section::Section::new(stringify!($name), $crate::location!(), $level)
$(.set_parent(&$parent))?;
let _section = $name.enter($crate::field::FieldSet::new([]));
};
Expand Down
5 changes: 2 additions & 3 deletions src/profiler/section.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

use crate::field::FieldSet;
use bp3d_logger::Location;
use crate::util::Location;
use std::num::NonZeroU32;
use std::sync::OnceLock;
use std::time::Instant;
Expand Down Expand Up @@ -121,8 +121,7 @@ impl Section {
mod tests {
use crate::field::FieldSet;
use crate::profiler::section::{Level, Section};
use crate::{fields, profiler_section_start};
use bp3d_logger::location;
use crate::{fields, location, profiler_section_start};

#[test]
fn basic() {
Expand Down
2 changes: 1 addition & 1 deletion src/trace/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,6 @@
macro_rules! span {
($name: ident) => {
static $name: $crate::trace::span::Callsite =
$crate::trace::span::Callsite::new(stringify!($name), bp3d_logger::location!());
$crate::trace::span::Callsite::new(stringify!($name), $crate::location!());
};
}
2 changes: 1 addition & 1 deletion src/trace/span.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

use crate::field::Field;
use bp3d_logger::Location;
use crate::util::Location;
use std::num::NonZeroU32;
use std::sync::OnceLock;

Expand Down
100 changes: 100 additions & 0 deletions src/util.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
// Copyright (c) 2024, BlockProject 3D
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
// * Neither the name of BlockProject 3D nor the names of its contributors
// may be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

/// Extracts the target name and the module path (without the target name) from a full module path string.
///
/// # Arguments
///
/// * `base_string`: a full module path string (ex: bp3d_logger::util::extract_target_module).
///
/// returns: (&str, &str)
pub fn extract_target_module(base_string: &str) -> (&str, &str) {
let target = base_string
.find("::")
.map(|v| &base_string[..v])
.unwrap_or(base_string);
let module = base_string.find("::").map(|v| &base_string[(v + 2)..]);
(target, module.unwrap_or("main"))
}

/// The context of a log message.
#[derive(Clone, Copy)]
pub struct Location {
module_path: &'static str,
file: &'static str,
line: u32,
}

impl Location {
/// Creates a new instance of a log message location.
///
/// This function is const to let the caller store location structures in statics.
///
/// # Arguments
///
/// * `module_path`: the module path obtained from the [module_path](module_path) macro.
/// * `file`: the source file obtained from the [file](file) macro.
/// * `line`: the line number in the source file obtained from the [line](line) macro.
///
/// returns: Metadata
pub const fn new(module_path: &'static str, file: &'static str, line: u32) -> Self {
Self {
module_path,
file,
line,
}
}

/// The module path which issued this log message.
pub fn module_path(&self) -> &'static str {
self.module_path
}

/// The source file which issued this log message.
pub fn file(&self) -> &'static str {
self.file
}

/// The line in the source file which issued this log message.
pub fn line(&self) -> u32 {
self.line
}

/// Extracts the target name and the module name from the module path.
pub fn get_target_module(&self) -> (&'static str, &'static str) {
extract_target_module(self.module_path)
}
}

/// Generate a [Location](crate::Location) structure.
#[macro_export]
macro_rules! location {
() => {
$crate::util::Location::new(module_path!(), file!(), line!())
};
}

0 comments on commit 8c688bb

Please sign in to comment.