From 33bfff2e982da08d0f807134e4bfd7930b07c5f2 Mon Sep 17 00:00:00 2001 From: Kerdonov Date: Mon, 17 Nov 2025 00:48:23 +0200 Subject: [PATCH] bugfix, implemented verbose logging cli option --- cracked_md/src/lib.rs | 11 ++++++++--- stdsrv/src/args.rs | 14 +++++++++++--- stdsrv/src/logger.rs | 19 +++++++++++-------- stdsrv/src/response.rs | 4 +++- 4 files changed, 33 insertions(+), 15 deletions(-) diff --git a/cracked_md/src/lib.rs b/cracked_md/src/lib.rs index 850ee26..ae73c61 100644 --- a/cracked_md/src/lib.rs +++ b/cracked_md/src/lib.rs @@ -1,7 +1,7 @@ //! A "Markdown" parser and HTML generator. Part of a static site generator `marksmith-rs`. //! Not following any standards, only vibes. -#![deny(unused_imports)] +#![deny(dead_code, unused_imports)] #![allow(clippy::needless_pass_by_value)] use fstools::crawl_fs; @@ -107,6 +107,7 @@ pub enum Error { InDirIsNotDir, OutDirIsNotEmpty, OutDirIsNotDir, + OutDirFileOverwriteWithoutForce, OutDirFileDeleteNotAllowed, OutDirDirectoryInPlaceOfFile, FileRead, @@ -162,8 +163,12 @@ pub fn generate(indir: &PathBuf, outdir: &PathBuf, force: bool) -> Result<()> { // check if path exists if newpath.exists() { // remove if is file and if force, otherwise error - if newpath.is_file() && force { - fs::remove_file(&newpath).map_err(|_e| Error::OutDirFileDeleteNotAllowed)?; + if newpath.is_file() { + if force { + fs::remove_file(&newpath).map_err(|_e| Error::OutDirFileDeleteNotAllowed)?; + } else { + Err(Error::OutDirFileOverwriteWithoutForce)?; + } } else { Err(Error::OutDirDirectoryInPlaceOfFile)?; } diff --git a/stdsrv/src/args.rs b/stdsrv/src/args.rs index 1ace301..075a2e0 100644 --- a/stdsrv/src/args.rs +++ b/stdsrv/src/args.rs @@ -1,10 +1,11 @@ //! Simple and program specific command line argument parsing solution. -use std::path::PathBuf; - use crate::error::Error; - use crate::error::ErrorKind; +use std::path::PathBuf; +use std::sync::OnceLock; + +pub static VERBOSE: OnceLock = OnceLock::new(); pub struct ProgramArgs { pub outdir: PathBuf, @@ -12,6 +13,7 @@ pub struct ProgramArgs { pub generate: bool, pub force: bool, pub addr: String, + pub verbose: bool, } impl Default for ProgramArgs { @@ -22,6 +24,7 @@ impl Default for ProgramArgs { generate: false, force: false, addr: "0.0.0.0:8080".to_string(), + verbose: false, } } } @@ -50,11 +53,16 @@ impl TryFrom for ProgramArgs { } "-g" => a.generate = true, "-f" => a.force = true, + "-v" => { + a.verbose = true; + VERBOSE.get_or_init(|| true); + } _ => { a.outdir = v.into(); } } } + VERBOSE.get_or_init(|| false); Ok(a) } } diff --git a/stdsrv/src/logger.rs b/stdsrv/src/logger.rs index 3ec0b95..81a2ea0 100644 --- a/stdsrv/src/logger.rs +++ b/stdsrv/src/logger.rs @@ -2,6 +2,7 @@ use std::fmt::Display; #[derive(Debug)] #[allow(dead_code)] +#[derive(PartialEq)] pub enum Level { Error, Warn, @@ -30,13 +31,15 @@ impl Display for Level { #[macro_export] macro_rules! log { ($level:expr, $($arg:tt)*) => {{ - println!( - "{} {}:{}:{}: {}", - $level, - std::module_path!(), - std::file!(), - std::line!(), - format!($($arg)*) - ); + if $level != Level::Debug || crate::args::VERBOSE.get().unwrap().to_owned() { + println!( + "{} {}:{}:{}: {}", + $level, + std::module_path!(), + std::file!(), + std::line!(), + format!($($arg)*) + ); + } }}; } diff --git a/stdsrv/src/response.rs b/stdsrv/src/response.rs index 4abfa74..dc15c6c 100644 --- a/stdsrv/src/response.rs +++ b/stdsrv/src/response.rs @@ -119,7 +119,9 @@ impl HttpResponse { let _ = std::io::Read::read(stream, &mut [0u8; 1]); */ - log!(Level::Info, "\n{}", &self); + // todo better verbose tracking + log!(Level::Info, "{} {}", self.version, self.status); + log!(Level::Debug, "\n{}", &self); Ok(()) }