kraken-http 0.1.2

Asynchronous HTTP API bindings for the Kraken cryptocurrency exchange.
Documentation
use serde::{Deserialize, Serialize};
use std::fmt;

#[derive(Serialize, Deserialize)]
pub struct SystemStatusResponse {
    pub result: SystemStatusResult,
    pub error: Vec<String>,
}

impl fmt::Display for SystemStatusResponse {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        if !self.error.is_empty() {
            write!(f, "{:#?}", &self.error)
        } else {
            write!(f, "{}", &self.result)
        }
    }
}

#[derive(Serialize, Deserialize)]
pub struct SystemStatusResult {
    pub timestamp: String,
    pub status: SystemStatusEnum,
}

impl fmt::Display for SystemStatusResult {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "Time: {}, Status: {}", &self.timestamp, &self.status)
    }
}

#[derive(Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum SystemStatusEnum {
    Online,
    Maintenance,
    CancelOnly,
    PostOnly,
}

impl fmt::Display for SystemStatusEnum {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        let val = match self {
            Self::Online => "online",
            Self::Maintenance => "maintenance",
            Self::CancelOnly => "cancel_only",
            Self::PostOnly => "post_only",
        };
        write!(f, "{}", val)
    }
}