meowping 2.0.8

A flexible ping utility Tool written in Rust, that is focused on being size efficient and fast.
#[cfg(target_os = "windows")]
pub mod fix_ansicolor {
    use windows_sys::Win32::System::Console::{
        ENABLE_VIRTUAL_TERMINAL_PROCESSING, GetConsoleMode, GetStdHandle, STD_OUTPUT_HANDLE,
        SetConsoleMode,
    };

    pub fn enable_ansi_support() {
        unsafe {
            let stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE);
            if stdout_handle.is_null() {
                eprintln!("Failed to get standard output handle.");
                return;
            }
            let mut mode = 0u32;
            if GetConsoleMode(stdout_handle, &raw mut mode) == 0 {
                eprintln!("Failed to get current console mode.");
                return;
            }
            if SetConsoleMode(stdout_handle, mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING) == 0 {
                eprintln!("Failed to enable virtual terminal processing.");
            }
        }
    }
}

pub trait Colorize {
    fn color(&self, color_code: &str) -> String;
    fn green(&self) -> String {
        self.color("\x1b[32m")
    }
    fn red(&self) -> String {
        self.color("\x1b[31m")
    }
    fn bright_blue(&self) -> String {
        self.color("\x1b[94m")
    }
    fn yellow(&self) -> String {
        self.color("\x1b[33m")
    }
    fn orange(&self) -> String {
        self.color("\x1b[38;5;208m")
    }
    fn magenta(&self) -> String {
        self.color("\x1b[35m")
    }
}

impl Colorize for str {
    fn color(&self, color_code: &str) -> String {
        format!("{}{}{}", color_code, self, "\x1b[0m")
    }
}

use crate::parser::Parser;
use std::fmt::Display;

#[derive(Clone, Debug, PartialEq, Eq)]
pub struct HyperLink {
    text: String,
    link: String,
}

impl HyperLink {
    pub fn new(text: impl AsRef<str>, link: impl AsRef<str>) -> Result<Self, String> {
        let text = text.as_ref().to_owned();
        let parsed_url = Parser::parse(link.as_ref()).map_err(|_| "Invalid URL".to_string())?;
        let reconstructed_url = format!(
            "{}://{}{}",
            parsed_url.scheme, parsed_url.host, parsed_url.path
        );

        Ok(Self {
            text,
            link: reconstructed_url,
        })
    }
}

impl Display for HyperLink {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        let Self { text, link } = self;
        write!(f, "\x1b]8;;{link}\x1b\\{text}\x1b]8;;\x1b\\")
    }
}