mexc-rs 0.2.0

Rust client for the mexc.com exchange
Documentation
use std::error::Error;
use std::fmt::{Display, Formatter};
use crate::futures::error::{ApiError, ErrorCode};
use crate::futures::result::ApiResult;

#[derive(Debug, serde::Deserialize)]
#[serde(untagged)]
pub enum ApiResponse<T> {
    Success(SuccessApiResponse<T>),
    Error(ErrorApiResponse),
}

#[derive(Debug, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SuccessApiResponse<T> {
    pub data: T,
}

#[derive(Debug, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ErrorApiResponse {
    pub code: ErrorCode,
    pub message: String,
}

impl<T> ApiResponse<T> {
    pub fn into_result(self) -> Result<T, ErrorApiResponse> {
        match self {
            Self::Success(output) => Ok(output.data),
            Self::Error(err) => Err(err),
        }
    }

    pub fn into_api_result(self) -> ApiResult<T> {
        match self {
            Self::Success(output) => Ok(output.data),
            Self::Error(response) => Err(ApiError::ErrorResponse(response)),
        }
    }
}

impl Error for ErrorApiResponse {}

impl Display for ErrorApiResponse {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        write!(f, "Error response: code: {}, msg: {}", self.code, self.message)
    }
}