use ex3_node_error::{Error, OtherError};
use ex3_serde::cbor;
use crate::tx_type_dto::{
    SpotMarketRegistration, UpdateSpotMarketFeeTo, UpdateSpotMarketInitialFeeTo,
    UpdateSpotMarketInitialTradingFee, UpdateSpotMarketTradingFee, UpdateSpotMarketTradingSettings,
};
use crate::PayloadDecoder;
use crate::Result;
impl PayloadDecoder {
    pub fn decode_to_register_spot_market(
        payload: &[u8],
    ) -> Result<ex3_node_types::transaction::SpotMarketRegistration> {
        let register_market =
            cbor::deserialize::<SpotMarketRegistration>(payload).map_err(|e| {
                <OtherError as Into<Error>>::into(OtherError::new(format!(
                    "Failed to deserialize payload to SpotMarketRegistration: {}",
                    e
                )))
            })?;
        Ok(register_market.into())
    }
    pub fn decode_to_update_spot_market_trading_settings(
        payload: &[u8],
    ) -> Result<ex3_node_types::transaction::UpdateSpotMarketTradingSettings> {
        let update_market_settings = cbor::deserialize::<UpdateSpotMarketTradingSettings>(payload)
            .map_err(|e| {
                <OtherError as Into<Error>>::into(OtherError::new(format!(
                    "Failed to deserialize payload to UpdateSpotMarketTradingSettings: {}",
                    e
                )))
            })?;
        Ok(update_market_settings.into())
    }
    pub fn decode_to_update_spot_market_initial_fee_to(
        payload: &[u8],
    ) -> Result<ex3_node_types::transaction::UpdateSpotMarketInitialFeeTo> {
        let update_market_initial_fee_to =
            cbor::deserialize::<UpdateSpotMarketInitialFeeTo>(payload).map_err(|e| {
                <OtherError as Into<Error>>::into(OtherError::new(format!(
                    "Failed to deserialize payload to UpdateMarketInitialFeeTo: {}",
                    e
                )))
            })?;
        Ok(update_market_initial_fee_to.into())
    }
    pub fn decode_to_update_spot_market_fee_to(
        payload: &[u8],
    ) -> Result<ex3_node_types::transaction::UpdateSpotMarketFeeTo> {
        let update_market_fee_to =
            cbor::deserialize::<UpdateSpotMarketFeeTo>(payload).map_err(|e| {
                <OtherError as Into<Error>>::into(OtherError::new(format!(
                    "Failed to deserialize payload to UpdateMarketFeeTo: {}",
                    e
                )))
            })?;
        Ok(update_market_fee_to.into())
    }
    pub fn decode_to_update_spot_market_initial_trading_fee(
        payload: &[u8],
    ) -> Result<ex3_node_types::transaction::UpdateSpotMarketInitialTradingFee> {
        let update_market_initial_fee =
            cbor::deserialize::<UpdateSpotMarketInitialTradingFee>(payload).map_err(|e| {
                <OtherError as Into<Error>>::into(OtherError::new(format!(
                    "Failed to deserialize payload to UpdateSpotMarketInitialFee: {}",
                    e
                )))
            })?;
        Ok(update_market_initial_fee.into())
    }
    pub fn decode_to_update_spot_market_trading_fee(
        payload: &[u8],
    ) -> Result<ex3_node_types::transaction::UpdateSpotMarketTradingFee> {
        let update_market_fee =
            cbor::deserialize::<UpdateSpotMarketTradingFee>(payload).map_err(|e| {
                <OtherError as Into<Error>>::into(OtherError::new(format!(
                    "Failed to deserialize payload to UpdateSpotMarketFee: {}",
                    e
                )))
            })?;
        Ok(update_market_fee.into())
    }
}