bybit-rust-api 0.3.0

Complete Rust SDK for Bybit API V5 with all endpoints, comprehensive type safety and full test coverage
Documentation
use std::fmt::{Display, Formatter, Result};

use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize, PartialEq)]
pub enum RejectReason {
    #[serde(rename = "EC_NoError")]
    NoError,
    #[serde(rename = "EC_Others")]
    Others,
    #[serde(rename = "EC_UnknownMessageType")]
    UnknownMessageType,
    #[serde(rename = "EC_MissingClOrdID")]
    MissingClOrdID,
    #[serde(rename = "EC_MissingOrigClOrdID")]
    MissingOrigClOrdID,
    #[serde(rename = "EC_ClOrdIDOrigClOrdIDAreTheSame")]
    ClOrdIDOrigClOrdIDAreTheSame,
    #[serde(rename = "EC_DuplicatedClOrdID")]
    DuplicatedClOrdID,
    #[serde(rename = "EC_OrigClOrdIDDoesNotExist")]
    OrigClOrdIDDoesNotExist,
    #[serde(rename = "EC_TooLateToCancel")]
    TooLateToCancel,
    #[serde(rename = "EC_UnknownOrderType")]
    UnknownOrderType,
    #[serde(rename = "EC_UnknownSide")]
    UnknownSide,
    #[serde(rename = "EC_UnknownTimeInForce")]
    UnknownTimeInForce,
    #[serde(rename = "EC_WronglyRouted")]
    WronglyRouted,
    #[serde(rename = "EC_MarketOrderPriceIsNotZero")]
    MarketOrderPriceIsNotZero,
    #[serde(rename = "EC_LimitOrderInvalidPrice")]
    LimitOrderInvalidPrice,
    #[serde(rename = "EC_NoEnoughQtyToFill")]
    NoEnoughQtyToFill,
    #[serde(rename = "EC_NoImmediateQtyToFill")]
    NoImmediateQtyToFill,
    #[serde(rename = "EC_PerCancelRequest")]
    PerCancelRequest,
    #[serde(rename = "EC_MarketOrderCannotBePostOnly")]
    MarketOrderCannotBePostOnly,
    #[serde(rename = "EC_PostOnlyWillTakeLiquidity")]
    PostOnlyWillTakeLiquidity,
    #[serde(rename = "EC_CancelReplaceOrder")]
    CancelReplaceOrder,
    #[serde(rename = "EC_InvalidSymbolStatus")]
    InvalidSymbolStatus,
    #[serde(rename = "EC_CancelForNoFullFill")]
    CancelForNoFullFill,
}

impl Display for RejectReason {
    fn fmt(&self, f: &mut Formatter) -> Result {
        match self {
            RejectReason::NoError => write!(f, "EC_NoError"),
            RejectReason::Others => write!(f, "EC_Others"),
            RejectReason::UnknownMessageType => write!(f, "EC_UnknownMessageType"),
            RejectReason::MissingClOrdID => write!(f, "EC_MissingClOrdID"),
            RejectReason::MissingOrigClOrdID => write!(f, "EC_MissingOrigClOrdID"),
            RejectReason::ClOrdIDOrigClOrdIDAreTheSame => {
                write!(f, "EC_ClOrdIDOrigClOrdIDAreTheSame")
            }
            RejectReason::DuplicatedClOrdID => write!(f, "EC_DuplicatedClOrdID"),
            RejectReason::OrigClOrdIDDoesNotExist => write!(f, "EC_OrigClOrdIDDoesNotExist"),
            RejectReason::TooLateToCancel => write!(f, "EC_TooLateToCancel"),
            RejectReason::UnknownOrderType => write!(f, "EC_UnknownOrderType"),
            RejectReason::UnknownSide => write!(f, "EC_UnknownSide"),
            RejectReason::UnknownTimeInForce => write!(f, "EC_UnknownTimeInForce"),
            RejectReason::WronglyRouted => write!(f, "EC_WronglyRouted"),
            RejectReason::MarketOrderPriceIsNotZero => write!(f, "EC_MarketOrderPriceIsNotZero"),
            RejectReason::LimitOrderInvalidPrice => write!(f, "EC_LimitOrderInvalidPrice"),
            RejectReason::NoEnoughQtyToFill => write!(f, "EC_NoEnoughQtyToFill"),
            RejectReason::NoImmediateQtyToFill => write!(f, "EC_NoImmediateQtyToFill"),
            RejectReason::PerCancelRequest => write!(f, "EC_PerCancelRequest"),
            RejectReason::MarketOrderCannotBePostOnly => {
                write!(f, "EC_MarketOrderCannotBePostOnly")
            }
            RejectReason::PostOnlyWillTakeLiquidity => write!(f, "EC_PostOnlyWillTakeLiquidity"),
            RejectReason::CancelReplaceOrder => write!(f, "EC_CancelReplaceOrder"),
            RejectReason::InvalidSymbolStatus => write!(f, "EC_InvalidSymbolStatus"),
            RejectReason::CancelForNoFullFill => write!(f, "EC_CancelForNoFullFill"),
        }
    }
}