#![allow(non_snake_case)]
#![allow(dead_code)]
#![allow(unused_parens)]
extern crate core;
pub mod HTracer;
pub mod File;
pub mod CommandLine;
pub mod ModuleAbstract;
pub mod Type;
mod OneLog;
pub mod backtrace;
use thiserror::Error;
#[derive(Error, Debug)]
pub enum Errors
{
#[error("'module/{0}' not found in config")]
CannotFoundConfigNode(String),
#[error("module '{0}' configuration returned a error : {1}")]
ModuleConfigError(String,#[source] anyhow::Error)
}
#[macro_export]
macro_rules! HTrace
{
($a:expr) => {
$crate::HTracer::HTracer::log(&$a, $crate::Type::Type::NORMAL, file!(), line!())
};
(($b:expr) $a:expr) => {
if($b.tou8() >= $crate::Type::Type::ERROR.tou8())
{
$crate::HTracer::HTracer::logWithBacktrace(&$a, $b, file!(), line!(),$crate::backtrace!());
}
else
{
$crate::HTracer::HTracer::log(&$a, $b, file!(), line!());
}
};
($a:expr $(,$arg:expr)*) => {
$crate::HTracer::HTracer::log(&format!($a,$($arg),*), $crate::Type::Type::NORMAL, file!(), line!())
};
(($b:expr) $a:expr $(,$arg:expr)*) => {
if($b.tou8() >= $crate::Type::Type::ERROR.tou8())
{
$crate::HTracer::HTracer::logWithBacktrace(&format!($a,$($arg),*), $b, file!(), line!(),$crate::backtrace!())
}
else
{
$crate::HTracer::HTracer::log(&format!($a,$($arg),*), $b, file!(), line!())
}
};
}
#[macro_export]
macro_rules! HTraceError
{
($a:expr) => {
match $a {
Ok(_) => {}
Err(ref errorToTrace) => {
$crate::HTracer::HTracer::logWithBacktrace(&errorToTrace.to_string(), $crate::Type::Type::ERROR, file!(), line!(), $crate::backtrace!())
}
}
};
($desc:expr,$a:expr) => {
match $a {
Ok(_) => {}
Err(ref errorToTrace) => {
$crate::HTracer::HTracer::logWithBacktrace(&format!($desc,errorToTrace.to_string()), $crate::Type::Type::ERROR, file!(), line!(), $crate::backtrace!())
}
}
};
(($b:expr) $a:expr) => {
match $a {
Ok(_) => {}
Err(ref errorToTrace) => {
if($b.tou8() >= $crate::Type::Type::ERROR.tou8())
{
$crate::HTracer::HTracer::logWithBacktrace(&errorToTrace.to_string(), $b, file!(), line!(), $crate::backtrace!())
}
else
{
$crate::HTracer::HTracer::log(&errorToTrace.to_string(), $b, file!(), line!())
}
}
}
};
(($b:expr) $desc:expr,$a:expr) => {
match $a {
Ok(_) => {}
Err(ref errorToTrace) => {
if($b.tou8() >= $crate::Type::Type::ERROR.tou8())
{
$crate::HTracer::HTracer::logWithBacktrace(&format!($desc,errorToTrace.to_string()), $b, file!(), line!(), $crate::backtrace!())
}
else
{
$crate::HTracer::HTracer::log(&format!($desc,errorToTrace.to_string()), $b, file!(), line!())
}
}
}
};
}
#[macro_export]
macro_rules! namedThread
{
($a:expr) => {
{
let filename = file!();
let filename = filename.split('/').last().unwrap_or(filename);
let name = format!("{}/{}",filename,line!());
std::thread::Builder::new().name(name.clone()).spawn(move ||{
$crate::HTracer::HTracer::threadSetName(name);
$a()
})
}
};
($b:expr,$a:expr) => {
{
let name = $b.to_string();
std::thread::Builder::new().name(name.clone()).spawn(move ||{
$crate::HTracer::HTracer::threadSetName(name);
$a()
})
}
};
}
#[macro_export]
macro_rules! backtrace
{
() => {
$crate::HTracer::HTracer::backtrace();
};
}