timeseries-table-format 0.7.0

Append-only time-series table format with gap/overlap tracking
Documentation
use std::env::VarError;
use std::io::IsTerminal;

use tracing_subscriber::EnvFilter;

const DEFAULT_FILTER: &str = "warn";

pub(crate) fn init() -> Result<(), String> {
    let filter = match std::env::var(EnvFilter::DEFAULT_ENV) {
        Ok(value) => match EnvFilter::try_new(&value) {
            Ok(filter) => filter,
            Err(error) => {
                eprintln!(
                    "warning: invalid RUST_LOG filter {value:?}: {error}; using warning-level default"
                );
                EnvFilter::new(DEFAULT_FILTER)
            }
        },
        Err(VarError::NotPresent) => EnvFilter::new(DEFAULT_FILTER),
        Err(VarError::NotUnicode(_)) => {
            eprintln!("warning: invalid non-Unicode RUST_LOG filter; using warning-level default");
            EnvFilter::new(DEFAULT_FILTER)
        }
    };

    tracing_subscriber::fmt()
        .compact()
        .with_env_filter(filter)
        .with_writer(std::io::stderr)
        .with_ansi(std::io::stderr().is_terminal())
        .try_init()
        .map_err(|error| error.to_string())
}