Move everything into workspace

This commit is contained in:
Michael Mikovsky
2026-01-26 09:13:46 -07:00
parent b619fb7a71
commit 5d6d746985
41 changed files with 5374 additions and 1105 deletions
+148
View File
@@ -0,0 +1,148 @@
#[cfg(feature = "log_debug")]
#[macro_export]
macro_rules! debug {
($fmt:tt) => {{
let log_result = unshell_obfuscate::format_obs!($fmt);
$crate::logger::add_record(
$crate::logger::LogLevel::Debug,
#[cfg(feature = "log_debug")]
Some(String::from(unshell_obfuscate::file_symbol!())),
#[cfg(not(feature = "log_debug"))]
None,
std::time::SystemTime::now(),
log_result
);
}};
($fmt:tt, $($arg:expr),*) => {{
let log_result = unshell_obfuscate::format_obs!($fmt, $($arg),*);
$crate::logger::add_record(
$crate::logger::LogLevel::Debug,
#[cfg(feature = "log_debug")]
Some(String::from(unshell_obfuscate::file_symbol!())),
#[cfg(not(feature = "log_debug"))]
None,
std::time::SystemTime::now(),
log_result
);
}};
}
#[cfg(not(feature = "log_debug"))]
#[macro_export]
macro_rules! debug {
($fmt:tt) => {{
let _ = $fmt;
}};
($fmt:tt, $($arg:expr),*) => {{
let _ = $fmt;
$(let _ = $arg;)*
}};
}
#[macro_export]
macro_rules! info {
($fmt:tt) => {{
let log_result = unshell_obfuscate::format_obs!($fmt);
$crate::logger::add_record(
$crate::logger::LogLevel::Info,
#[cfg(feature = "log_debug")]
Some(String::from(unshell_obfuscate::file_symbol!())),
#[cfg(not(feature = "log_debug"))]
None,
std::time::SystemTime::now(),
log_result
);
}};
($fmt:tt, $($arg:expr),*) => {{
let log_result = unshell_obfuscate::format_obs!($fmt, $($arg),*);
$crate::logger::add_record(
$crate::logger::LogLevel::Info,
#[cfg(feature = "log_debug")]
Some(String::from(unshell_obfuscate::file_symbol!())),
#[cfg(not(feature = "log_debug"))]
None,
std::time::SystemTime::now(),
log_result
);
}};
}
#[macro_export]
macro_rules! warn {
($fmt:tt) => {{
let log_result = unshell_obfuscate::format_obs!($fmt);
$crate::logger::add_record(
$crate::logger::LogLevel::Warn,
#[cfg(feature = "log_debug")]
Some(String::from(unshell_obfuscate::file_symbol!())),
#[cfg(not(feature = "log_debug"))]
None,
std::time::SystemTime::now(),
log_result
);
}};
($fmt:tt, $($arg:expr),*) => {{
let log_result = unshell_obfuscate::format_obs!($fmt, $($arg),*);
$crate::logger::add_record(
$crate::logger::LogLevel::Warn,
#[cfg(feature = "log_debug")]
Some(String::from(unshell_obfuscate::file_symbol!())),
#[cfg(not(feature = "log_debug"))]
None,
std::time::SystemTime::now(),
log_result
);
}};
}
#[macro_export]
macro_rules! error {
($fmt:tt) => {{
let log_result = unshell_obfuscate::format_obs!($fmt);
$crate::logger::add_record(
$crate::logger::LogLevel::Error,
#[cfg(feature = "log_debug")]
Some(String::from(unshell_obfuscate::file_symbol!())),
#[cfg(not(feature = "log_debug"))]
None,
std::time::SystemTime::now(),
log_result
);
}};
($fmt:tt, $($arg:expr),*) => {{
let log_result = unshell_obfuscate::format_obs!($fmt, $($arg),*);
$crate::logger::add_record(
$crate::logger::LogLevel::Error,
#[cfg(feature = "log_debug")]
Some(String::from(unshell_obfuscate::file_symbol!())),
#[cfg(not(feature = "log_debug"))]
None,
std::time::SystemTime::now(),
log_result
);
}};
}
+45
View File
@@ -0,0 +1,45 @@
// Macros that are used that just drop the inside variables
#[macro_export]
macro_rules! debug {
($fmt:tt) => {{
let _ = $fmt;
}};
($fmt:tt, $($arg:expr),*) => {{
let _ = $fmt;
$(let _ = $arg;)*
}};
}
#[macro_export]
macro_rules! info {
($fmt:tt) => {{
let _ = $fmt;
}};
($fmt:tt, $($arg:expr),*) => {{
let _ = $fmt;
$(let _ = $arg;)*
}};
}
#[macro_export]
macro_rules! warn {
($fmt:tt) => {{
let _ = $fmt;
}};
($fmt:tt, $($arg:expr),*) => {{
let _ = $fmt;
$(let _ = $arg;)*
}};
}
#[macro_export]
macro_rules! error {
($fmt:tt) => {{
let _ = $fmt;
}};
($fmt:tt, $($arg:expr),*) => {{
let _ = $fmt;
$(let _ = $arg;)*
}};
}
+82
View File
@@ -0,0 +1,82 @@
// Choose if the macros are enabled based on the feature setting
#[cfg(feature = "log")]
pub mod macros;
#[cfg(not(feature = "log"))]
pub mod macros_disabled;
mod pretty_logger;
use std::time::SystemTime;
pub use pretty_logger::PrettyLogger;
static mut LOGGER: &dyn Logger = &DefaultLogger;
#[derive(Debug, serde::Serialize, serde::Deserialize)]
pub enum LogLevel {
Debug,
Info,
Warn,
Error,
}
#[derive(Debug, serde::Serialize, serde::Deserialize)]
pub struct Record {
log_level: LogLevel,
location: Option<String>,
// line: u32,
time: SystemTime,
message: String,
}
pub trait Logger {
fn log(&self, log: Record);
}
struct DefaultLogger;
impl Logger for DefaultLogger {
fn log(&self, _: Record) {}
}
#[allow(unused_variables)]
pub fn set_logger_box(logger: Box<dyn Logger>) {
#[cfg(feature = "log")]
unsafe {
LOGGER = Box::leak(logger);
}
}
pub fn set_logger(logger: &'static dyn Logger) {
unsafe {
LOGGER = logger;
}
}
pub fn add_record(
log_level: LogLevel,
location: Option<String>,
time: SystemTime,
message: String,
) {
logger().log(Record {
log_level,
location,
time,
message,
});
}
pub fn logger() -> &'static dyn Logger {
unsafe { LOGGER }
}
#[allow(dead_code, improper_ctypes_definitions)]
pub type SetupLogger = extern "C" fn(logger: &'static dyn Logger);
#[unsafe(no_mangle)]
#[allow(improper_ctypes_definitions)]
pub extern "C" fn setup_logger(logger: &'static dyn Logger) {
set_logger(logger);
}
+58
View File
@@ -0,0 +1,58 @@
use chrono::{DateTime, Utc};
use crate::logger::{LogLevel, Logger, Record};
pub struct PrettyLogger {
output: Option<Box<dyn Fn(&Record)>>,
}
// static TRACE_COLOR: &str = "\x1b[34m";
static DEBUG_COLOR: &str = "\x1b[36m";
static INFO_COLOR: &str = "\x1b[32m";
static WARN_COLOR: &str = "\x1b[33m";
static ERROR_COLOR: &str = "\x1b[31m";
static WHITE: &str = "\x1b[97m";
static OFF_WHITE: &str = "\x1b[37m";
static TIME_COLOR: &str = "\x1b[36m";
static GREY: &str = "\x1b[90m";
impl Logger for PrettyLogger {
fn log(&self, message: Record) {
if let Some(ref func) = self.output {
(*func)(&message)
}
let log_level = match message.log_level {
LogLevel::Debug => format!("{DEBUG_COLOR}DBUG"),
LogLevel::Info => format!("{INFO_COLOR}INFO"),
LogLevel::Warn => format!("{WARN_COLOR}WARN"),
LogLevel::Error => format!("{ERROR_COLOR}ERR!"),
};
let date: DateTime<Utc> = message.time.into();
let date = date.to_rfc2822().to_string();
let location = message.location.unwrap_or("".to_string());
println!(
"{OFF_WHITE}[{TIME_COLOR}{}{OFF_WHITE}] {} {WHITE}{} {GREY}{}{WHITE}",
date, log_level, message.message, location
);
}
}
impl PrettyLogger {
pub fn init() {
crate::logger::set_logger_box(Box::new(PrettyLogger { output: None }));
}
pub fn init_output<T>(output: T)
where
T: Fn(&Record) + 'static,
{
crate::logger::set_logger_box(Box::new(PrettyLogger {
output: Some(Box::new(output)),
}));
}
}