walletconnect 0.1.0

WalletConnect client implementation in Rust.
Documentation
use atty::Stream;
use termcolor::Color;
use termcolor::{ColorChoice, StandardStream};
use terminfo::capability::MaxColors;
use terminfo::Database;

#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub enum Output {
    Stdout,
    Stderr,
}

impl Output {
    pub fn stream(self) -> StandardStream {
        match self {
            Output::Stdout => StandardStream::stdout(default_color_choice(Stream::Stdout)),
            Output::Stderr => StandardStream::stderr(default_color_choice(Stream::Stderr)),
        }
    }
}

fn default_color_choice(stream: Stream) -> ColorChoice {
    if atty::is(stream) {
        ColorChoice::Auto
    } else {
        ColorChoice::Never
    }
}

impl Default for Output {
    fn default() -> Self {
        Output::Stdout
    }
}

#[derive(Clone, Debug)]
pub struct Colors {
    pub black: Option<Color>,
    pub white: Option<Color>,
}

impl Colors {
    pub fn none() -> Self {
        Colors {
            black: None,
            white: None,
        }
    }

    fn standard() -> Self {
        Colors {
            black: Some(Color::Black),
            white: Some(Color::White),
        }
    }

    #[cfg(unix)]
    fn ansi256() -> Self {
        Colors {
            black: Some(Color::Ansi256(16)),
            white: Some(Color::Ansi256(231)),
        }
    }
}

impl Default for Colors {
    #[cfg(unix)]
    fn default() -> Self {
        if let Ok(db) = Database::from_env() {
            match db.get::<MaxColors>() {
                Some(MaxColors(8)) => Colors::standard(),
                Some(MaxColors(256)) => Colors::ansi256(),
                _ => Colors::none(),
            }
        } else {
            Colors::none()
        }
    }

    #[cfg(windows)]
    fn default() -> Self {
        Colors::standard()
    }
}