tcpbin 0.1.2

Simple library/CLI providing TCP echo server
Documentation
//!TCPBin - A simple utility TCP server

#![warn(missing_docs)]
#![allow(clippy::style)]

use core::{net, time};

const READ_TIMEOUT: time::Duration = time::Duration::from_secs(1);
///Default local IP to be used
pub const DEFAULT_LOCAL_IP: net::IpAddr = net::IpAddr::V4(net::Ipv4Addr::UNSPECIFIED);

#[cfg(feature = "tracing")]
#[macro_export]
#[doc(hidden)]
macro_rules! info {
    ($($input:tt)*) => {
        ::tracing::info!($($input)*)
    };
}

#[cfg(all(not(debug_assertions), not(feature = "tracing")))]
#[macro_export]
#[doc(hidden)]
macro_rules! info {
    ($($input:tt)*) => {
        #[allow(unused)]
        let _ = (
            $($input)*
        );
    };
}

#[cfg(all(debug_assertions, not(feature = "tracing")))]
#[macro_export]
#[doc(hidden)]
macro_rules! info {
    ($($input:tt)*) => {
        ::std::println!($($input)*)
    };
}

#[cfg(feature = "tracing")]
#[macro_export]
#[doc(hidden)]
macro_rules! error {
    ($($input:tt)*) => {
        ::tracing::error!($($input)*)
    };
}

#[cfg(all(not(debug_assertions), not(feature = "tracing")))]
#[macro_export]
#[doc(hidden)]
macro_rules! error {
    ($($input:tt)*) => {
        #[allow(unused)]
        let _ = (
            $($input)*
        );
    };
}

#[cfg(all(debug_assertions, not(feature = "tracing")))]
#[macro_export]
#[doc(hidden)]
macro_rules! error {
    ($($input:tt)*) => {
        ::std::eprintln!($($input)*)
    };
}

macro_rules! io_error {
    ($error:expr, $description:literal) => {
        use ::std::io::ErrorKind;
        let error = $error;
        if !::core::matches!(error.kind(), ErrorKind::BrokenPipe | ErrorKind::NotConnected) {
            error!("{}(kind={:?}): {}", $description, error.kind(), error);
        } else {
            info!("{}(kind={:?}): {}", $description, error.kind(), error);
        }
    };
    ($error:expr, $description:literal, $addr:expr) => {
        use ::std::io::ErrorKind;
        let error = $error;
        if !::core::matches!(error.kind(), ErrorKind::BrokenPipe | ErrorKind::NotConnected) {
            error!("{}: {}(kind={:?}): {}", $addr, $description, error.kind(), error);
        } else {
            info!("{}: {}(kind={:?}): {}", $addr, $description, error.kind(), error);
        }
    };
}

mod utils;
mod ip;
pub use ip::IpEcho;
mod echo;
pub use echo::Echo;