summaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
authorBen Bridle <ben@derelict.engineering>2025-04-27 12:32:51 +1200
committerBen Bridle <ben@derelict.engineering>2025-04-27 12:32:51 +1200
commit2fbbf2d13ecb4de3d270ccfa3b61489f5fa51a91 (patch)
tree6f6851357b6d87a0f5b6e29722f1f127cd002e1d /src/lib.rs
parent3d5d1f7a19436151ba1dd52a2b50664969d90db6 (diff)
downloadlog-2fbbf2d13ecb4de3d270ccfa3b61489f5fa51a91.zip
Replace ansi library with inked library
The new inked library correctly handles coloured text on Windows, and allows colours to be disabled with the NO_COLOR environment variable.
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs88
1 files changed, 53 insertions, 35 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 11e826a..94b06f1 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,11 +1,13 @@
mod log_level;
pub use log_level::*;
-pub mod ansi { pub use ansi::*; }
+use inked::*;
use std::sync::Mutex;
-pub static LOG_LEVEL: Mutex<LogLevel> = Mutex::new(LogLevel::Warn);
+
+static LOG_LEVEL: Mutex<LogLevel> = Mutex::new(LogLevel::Warn);
+
pub fn set_log_level(level: LogLevel) {
*LOG_LEVEL.lock().unwrap() = level;
@@ -16,48 +18,64 @@ pub fn get_log_level() -> LogLevel {
}
-#[macro_export] macro_rules! info {
- ($($tokens:tt)*) => {
- if *$crate::LOG_LEVEL.lock().unwrap() <= { $crate::LogLevel::Info } {
- use $crate::ansi::*;
- eprint!("{BOLD}{BLUE}[INFO]{NORMAL}: ");
- eprint!($($tokens)*);
- eprintln!("{NORMAL}");
+pub fn log_info(message: &str, details: Option<impl Into<InkedString>>) {
+ if *LOG_LEVEL.lock().unwrap() <= LogLevel::Info {
+ let mut string = InkedString::new();
+ string.push(ink!("[INFO]").blue().bold());
+ string.push(ink!(": {message}\n"));
+ if let Some(details) = details {
+ string.append(details.into());
}
- };
+ string.eprint();
+ }
}
-#[macro_export] macro_rules! warn {
- ($($tokens:tt)*) => {{
- if *$crate::LOG_LEVEL.lock().unwrap() <= { $crate::LogLevel::Warn } {
- use $crate::ansi::*;
- eprint!("{BOLD}{YELLOW}[WARNING]{NORMAL}{WHITE}: ");
- eprint!($($tokens)*);
- eprintln!("{NORMAL}");
+pub fn log_warn(message: &str, details: Option<impl Into<InkedString>>) {
+ if *LOG_LEVEL.lock().unwrap() <= LogLevel::Warn {
+ let mut string = InkedString::new();
+ string.push(ink!("[WARN]").yellow().bold());
+ string.push(ink!(": {message}\n").white());
+ if let Some(details) = details {
+ string.append(details.into());
}
- }};
+ string.eprint();
+ }
}
-#[macro_export] macro_rules! error {
- ($($tokens:tt)*) => {{
- if *$crate::LOG_LEVEL.lock().unwrap() <= { $crate::LogLevel::Error } {
- use $crate::ansi::*;
- eprint!("{BOLD}{RED}[ERROR]{WHITE}: ");
- eprint!($($tokens)*);
- eprintln!("{NORMAL}");
+pub fn log_error(message: &str, details: Option<impl Into<InkedString>>) {
+ if *LOG_LEVEL.lock().unwrap() <= LogLevel::Error {
+ let mut string = InkedString::new();
+ string.push(ink!("[ERROR]").red().bold());
+ string.push(ink!(": {message}\n").white());
+ if let Some(details) = details {
+ string.append(details.into());
}
- }};
+ string.eprint();
+ }
}
-#[macro_export] macro_rules! fatal {
- ($($tokens:tt)*) => {{
- if *$crate::LOG_LEVEL.lock().unwrap() <= { $crate::LogLevel::Fatal } {
- use $crate::ansi::*;
- eprint!("{BOLD}{RED}[FATAL]{WHITE}: ");
- eprint!($($tokens)*);
- eprintln!("{NORMAL}");
+pub fn log_fatal(message: &str, details: Option<impl Into<InkedString>>) -> ! {
+ if *LOG_LEVEL.lock().unwrap() <= LogLevel::Fatal {
+ let mut string = InkedString::new();
+ string.push(ink!("[FATAL]").red().bold());
+ string.push(ink!(": {message}\n").white());
+ if let Some(details) = details {
+ string.append(details.into());
}
- std::process::exit(1);
- }};
+ string.eprint();
+ }
+ std::process::exit(1);
}
+#[macro_export] macro_rules! info {
+ ($($tokens:tt)*) => { $crate::log_info(&format!($($tokens)*), Option::<String>::None) };
+}
+#[macro_export] macro_rules! warn {
+ ($($tokens:tt)*) => { $crate::log_warn(&format!($($tokens)*), Option::<String>::None) };
+}
+#[macro_export] macro_rules! error {
+ ($($tokens:tt)*) => { $crate::log_error(&format!($($tokens)*), Option::<String>::None) };
+}
+#[macro_export] macro_rules! fatal {
+ ($($tokens:tt)*) => { $crate::log_fatal(&format!($($tokens)*), Option::<String>::None) };
+}