http-server-rs 0.0.18

Simple, zero-configuration command-line static HTTP server.
use std::collections::HashMap;

use colored::Colorize;

#[derive(Default)]
pub enum Logger {
  Quiet,
  #[default]
  Default,
}

impl Logger {
  pub fn println(
    &self,
    message: impl AsRef<str>,
  ) {
    match self {
      Logger::Quiet => return,
      Logger::Default => {}
    }
    println!("{}", message.as_ref());
  }

  pub fn br(&self) {
    match self {
      Logger::Quiet => return,
      Logger::Default => {}
    }
    println!();
  }

  pub fn print_folder(
    &self,
    message: &str,
  ) {
    match self {
      Logger::Quiet => return,
      Logger::Default => {}
    }
    let key = "Directory:".to_string();
    println!("📁 {:<19} {}", key.bold(), message);
  }

  pub fn print_config(
    &self,
    key: &str,
    value: &bool,
  ) {
    match self {
      Logger::Quiet => return,
      Logger::Default => {}
    }
    let message = if *value { "Enabled" } else { "Disabled" };
    let key = format!("{}:", key);
    println!("🔧 {:<19} {}", key.bold(), message);
  }

  pub fn print_headers(
    &self,
    headers: &HashMap<String, Vec<String>>,
  ) {
    match self {
      Logger::Quiet => return,
      Logger::Default => {}
    }
    let mut headers = headers.iter().collect::<Vec<(&String, &Vec<String>)>>();
    headers.sort();

    let Some(longest) = headers.iter().max_by_key(|v| v.0) else {
      return;
    };

    let min_len = longest.0.len() + 3;

    for (key, values) in headers {
      let key = format!("{}:", key);
      println!("📩 {:<min_len$} {}", key.bold(), values.join(", "));
    }
  }
}