/*
 * Binance Spot WebSocket API
 *
 * OpenAPI Specifications for the Binance Spot WebSocket API
 *
 * API documents:
 * - [Github web-socket-api documentation file](https://github.com/binance/binance-spot-api-docs/blob/master/web-socket-api.md)
 * - [General API information for web-socket-api on website](https://developers.binance.com/docs/binance-spot-api-docs/web-socket-api/general-api-information)
 *
 *
 * The version of the OpenAPI document: 1.0.0
 *
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

#![allow(unused_imports)]
use crate::spot::websocket_api::models;
use serde::{Deserialize, Deserializer, Serialize, de::Error};
use serde_json::Value;

#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct ExchangeInfoResponseResultSymbolsInner {
    #[serde(rename = "symbol", skip_serializing_if = "Option::is_none")]
    pub symbol: Option<String>,
    #[serde(rename = "status", skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
    #[serde(rename = "baseAsset", skip_serializing_if = "Option::is_none")]
    pub base_asset: Option<String>,
    #[serde(rename = "baseAssetPrecision", skip_serializing_if = "Option::is_none")]
    pub base_asset_precision: Option<i64>,
    #[serde(rename = "quoteAsset", skip_serializing_if = "Option::is_none")]
    pub quote_asset: Option<String>,
    #[serde(rename = "quotePrecision", skip_serializing_if = "Option::is_none")]
    pub quote_precision: Option<i64>,
    #[serde(
        rename = "quoteAssetPrecision",
        skip_serializing_if = "Option::is_none"
    )]
    pub quote_asset_precision: Option<i64>,
    #[serde(
        rename = "baseCommissionPrecision",
        skip_serializing_if = "Option::is_none"
    )]
    pub base_commission_precision: Option<i64>,
    #[serde(
        rename = "quoteCommissionPrecision",
        skip_serializing_if = "Option::is_none"
    )]
    pub quote_commission_precision: Option<i64>,
    #[serde(rename = "orderTypes", skip_serializing_if = "Option::is_none")]
    pub order_types: Option<Vec<String>>,
    #[serde(rename = "icebergAllowed", skip_serializing_if = "Option::is_none")]
    pub iceberg_allowed: Option<bool>,
    #[serde(rename = "ocoAllowed", skip_serializing_if = "Option::is_none")]
    pub oco_allowed: Option<bool>,
    #[serde(rename = "otoAllowed", skip_serializing_if = "Option::is_none")]
    pub oto_allowed: Option<bool>,
    #[serde(rename = "opoAllowed", skip_serializing_if = "Option::is_none")]
    pub opo_allowed: Option<bool>,
    #[serde(
        rename = "quoteOrderQtyMarketAllowed",
        skip_serializing_if = "Option::is_none"
    )]
    pub quote_order_qty_market_allowed: Option<bool>,
    #[serde(rename = "allowTrailingStop", skip_serializing_if = "Option::is_none")]
    pub allow_trailing_stop: Option<bool>,
    #[serde(
        rename = "cancelReplaceAllowed",
        skip_serializing_if = "Option::is_none"
    )]
    pub cancel_replace_allowed: Option<bool>,
    #[serde(rename = "amendAllowed", skip_serializing_if = "Option::is_none")]
    pub amend_allowed: Option<bool>,
    #[serde(
        rename = "pegInstructionsAllowed",
        skip_serializing_if = "Option::is_none"
    )]
    pub peg_instructions_allowed: Option<bool>,
    #[serde(
        rename = "isSpotTradingAllowed",
        skip_serializing_if = "Option::is_none"
    )]
    pub is_spot_trading_allowed: Option<bool>,
    #[serde(
        rename = "isMarginTradingAllowed",
        skip_serializing_if = "Option::is_none"
    )]
    pub is_margin_trading_allowed: Option<bool>,
    #[serde(rename = "filters", skip_serializing_if = "Option::is_none")]
    pub filters: Option<Vec<models::SymbolFilters>>,
    #[serde(rename = "permissions", skip_serializing_if = "Option::is_none")]
    pub permissions: Option<Vec<String>>,
    #[serde(rename = "permissionSets", skip_serializing_if = "Option::is_none")]
    pub permission_sets: Option<Vec<Vec<String>>>,
    #[serde(
        rename = "defaultSelfTradePreventionMode",
        skip_serializing_if = "Option::is_none"
    )]
    pub default_self_trade_prevention_mode: Option<String>,
    #[serde(
        rename = "allowedSelfTradePreventionModes",
        skip_serializing_if = "Option::is_none"
    )]
    pub allowed_self_trade_prevention_modes: Option<Vec<String>>,
}

impl ExchangeInfoResponseResultSymbolsInner {
    #[must_use]
    pub fn new() -> ExchangeInfoResponseResultSymbolsInner {
        ExchangeInfoResponseResultSymbolsInner {
            symbol: None,
            status: None,
            base_asset: None,
            base_asset_precision: None,
            quote_asset: None,
            quote_precision: None,
            quote_asset_precision: None,
            base_commission_precision: None,
            quote_commission_precision: None,
            order_types: None,
            iceberg_allowed: None,
            oco_allowed: None,
            oto_allowed: None,
            opo_allowed: None,
            quote_order_qty_market_allowed: None,
            allow_trailing_stop: None,
            cancel_replace_allowed: None,
            amend_allowed: None,
            peg_instructions_allowed: None,
            is_spot_trading_allowed: None,
            is_margin_trading_allowed: None,
            filters: None,
            permissions: None,
            permission_sets: None,
            default_self_trade_prevention_mode: None,
            allowed_self_trade_prevention_modes: None,
        }
    }
}
