ipcez 0.1.0

Rust library for ipcez.
Documentation
//! Error logging to stderr.
//!
//! Single responsibility: write error-related output to stderr so all error I/O
//! goes through one place. Callers compose the message or pass a `dyn Error` for
//! error-chain logging; this module does not depend on socket, os, or target.

use std::error::Error;
use std::io::{self, Write};

/// Writes `message` to stderr. Used by callers that format their own message (e.g. detection errors).
pub(crate) fn log_to_stderr(message: &str) {
    let _ = io::stderr().lock().write_all(message.as_bytes());
    let _ = io::stderr().lock().write_all(b"\n");
}

/// Logs the error's `Display` and, if present, its `source()` chain to stderr.
pub(crate) fn log_error(e: &dyn Error) {
    log_to_stderr(&format!("ipcez: error: {}", e));
    let mut source = e.source();
    while let Some(s) = source {
        log_to_stderr(&format!("  caused by: {}", s));
        source = s.source();
    }
}