LCOV - code coverage report
Current view: top level - src - logging.rs (source / functions) Coverage Total Hit
Test: lief.lcov Lines: 56.1 % 41 23
Test Date: 2024-10-27:00:00:00 Functions: 50.0 % 14 7

            Line data    Source code
       1              : //! LIEF's logging API
       2              : //!
       3              : //! This module contains function to tweak or use LIEF's logging mechanisms
       4              : //!
       5              : //!
       6              : //! ```
       7              : //! use lief::logging;
       8              : //!
       9              : //! logging::set_level(logging::Level::DEBUG);
      10              : //! logging::log(logging::Level::DEBUG, "Hi!");
      11              : //! ```
      12              : 
      13              : use lief_ffi as ffi;
      14              : 
      15              : use std::path::Path;
      16              : use std::convert::{From, Into};
      17              : 
      18              : #[allow(non_camel_case_types)]
      19            0 : #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
      20              : /// The different levels of log
      21              : pub enum Level {
      22              :     OFF,
      23              :     TRACE,
      24              :     DEBUG,
      25              :     INFO,
      26              :     WARN,
      27              :     ERR,
      28              :     CRITICAL,
      29              :     UNKNOWN(u32),
      30              : }
      31              : 
      32              : impl From<u32> for Level {
      33            0 :     fn from(value: u32) -> Self {
      34            0 :         match value {
      35            0 :             0x00000000 => Level::OFF,
      36            0 :             0x00000001 => Level::TRACE,
      37            0 :             0x00000002 => Level::DEBUG,
      38            0 :             0x00000003 => Level::INFO,
      39            0 :             0x00000004 => Level::WARN,
      40            0 :             0x00000005 => Level::ERR,
      41            0 :             0x00000006 => Level::CRITICAL,
      42            0 :             _ => Level::UNKNOWN(value),
      43              :         }
      44            0 :     }
      45              : }
      46              : 
      47              : impl Into<u32> for Level {
      48           16 :     fn into(self) -> u32 {
      49           16 :         match self {
      50            0 :             Level::OFF => 0x00000000,
      51            0 :             Level::TRACE => 0x00000001,
      52            8 :             Level::DEBUG => 0x00000002,
      53            8 :             Level::INFO => 0x00000003,
      54            0 :             Level::WARN => 0x00000004,
      55            0 :             Level::ERR => 0x00000005,
      56            0 :             Level::CRITICAL => 0x00000006,
      57            0 :             Level::UNKNOWN(_) => 0x00000003, // INFO
      58              :         }
      59           16 :     }
      60              : }
      61              : 
      62              : /// Reset the current logger
      63            8 : pub fn reset() {
      64            8 :     ffi::LIEF_Logging::reset()
      65            8 : }
      66              : 
      67              : /// Prevent any log message from being printed
      68            8 : pub fn disable() {
      69            8 :     ffi::LIEF_Logging::disable()
      70            8 : }
      71              : 
      72              : /// Enable the logger
      73            8 : pub fn enable() {
      74            8 :     ffi::LIEF_Logging::enable()
      75            8 : }
      76              : 
      77              : /// Change the logging level
      78              : ///
      79              : /// ```
      80              : /// set_level(Level::INFO)
      81              : /// ```
      82            8 : pub fn set_level(level: Level) {
      83            8 :     ffi::LIEF_Logging::set_level(level.into())
      84            8 : }
      85              : /// Switch to a file-based logger (instead of stderr-based)
      86              : ///
      87              : /// ```
      88              : /// let mut tmp = env::temp_dir();
      89              : /// tmp.push("lief_log.log");
      90              : /// logging::set_path(dir.as_path());
      91              : /// ```
      92           32 : pub fn set_path(path: &Path) {
      93           32 :     ffi::LIEF_Logging::set_path(path.to_str().expect("Can't convert into string"))
      94           32 : }
      95              : 
      96              : /// Log a message with the logger
      97            8 : pub fn log(level: Level, message: &str) {
      98            8 :     ffi::LIEF_Logging::log(level.into(), message)
      99            8 : }
        

Generated by: LCOV version 2.1-1