use super::client::MexcClient;

crate::exchanges::impl_exchange_method_wrappers! {
    MexcClient;
    public [
        get_contract_deals(product_symbol => "product_symbol"),
        get_contract_depth(product_symbol => "product_symbol"),
        get_contract_depth_commits(product_symbol => "product_symbol"),
        get_contract_details(),
        get_contract_fair_price(product_symbol => "product_symbol"),
        get_contract_fair_price_kline(product_symbol => "product_symbol", interval => "interval"),
        get_contract_funding_rate(product_symbol => "product_symbol"),
        get_contract_funding_rate_history(product_symbol => "product_symbol"),
        get_contract_index_price(product_symbol => "product_symbol"),
        get_contract_index_price_kline(product_symbol => "product_symbol", interval => "interval"),
        get_contract_kline(product_symbol => "product_symbol", interval => "interval"),
        get_contract_risk_reverse(),
        get_contract_risk_reverse_history(product_symbol => "product_symbol"),
        get_contract_ticker(),
        get_contract_time(),
        get_spot_agg_trades(product_symbol => "product_symbol"),
        get_spot_avg_price(product_symbol => "product_symbol"),
        get_spot_book_ticker(),
        get_spot_default_symbols(),
        get_spot_exchange_info(),
        get_spot_klines(product_symbol => "product_symbol", interval => "interval"),
        get_spot_orderbook(product_symbol => "product_symbol"),
        get_spot_recent_trades(product_symbol => "product_symbol"),
        get_spot_ticker_24hr(),
        get_spot_ticker_price(),
        get_spot_time(),
        ping(),
    ];
    private [
        cancel_all_contract_orders(product_symbol => "product_symbol"),
        cancel_contract_order(order_id => "order_id"),
        cancel_contract_order_with_external_id(product_symbol => "product_symbol", external_oid => "externalOid"),
        cancel_contract_orders(orders => "orders"),
        cancel_spot_open_orders(product_symbol => "product_symbol"),
        cancel_spot_order(product_symbol => "product_symbol"),
        change_contract_leverage(leverage => "leverage"),
        change_contract_margin(position_id => "positionId", amount => "amount", type_ => "type"),
        change_contract_position_mode(position_mode => "positionMode"),
        get_contract_asset(currency => "currency"),
        get_contract_assets(),
        get_contract_funding_records(),
        get_contract_history_orders(),
        get_contract_history_positions(),
        get_contract_leverage(product_symbol => "product_symbol"),
        get_contract_open_orders(product_symbol => "product_symbol"),
        get_contract_open_positions(),
        get_contract_order(order_id => "order_id"),
        get_contract_order_by_external_id(product_symbol => "product_symbol", external_oid => "external_oid"),
        get_contract_order_deal_details(order_id => "order_id"),
        get_contract_order_deals(),
        get_contract_orders(order_ids => "order_ids"),
        get_contract_plan_orders(),
        get_contract_position_mode(),
        get_contract_risk_limits(product_symbol => "product_symbol"),
        get_contract_stop_orders(),
        get_contract_trading_fee_rate(product_symbol => "product_symbol"),
        get_contract_transfer_records(),
        get_currency_info(),
        get_deposit_address(coin => "coin"),
        get_deposit_history(),
        get_internal_transfer_history(),
        get_kyc_status(),
        get_spot_account(),
        get_spot_all_orders(product_symbol => "product_symbol"),
        get_spot_mx_deduct_status(),
        get_spot_my_trades(product_symbol => "product_symbol"),
        get_spot_open_orders(product_symbol => "product_symbol"),
        get_spot_order(product_symbol => "product_symbol"),
        get_spot_self_symbols(),
        get_spot_symbol_commission(),
        get_user_universal_transfer_by_id(tran_id => "tranId"),
        get_user_universal_transfer_history(from_account_type => "fromAccountType", to_account_type => "toAccountType"),
        get_withdraw_history(),
        place_contract_limit_buy_order(product_symbol => "product_symbol", price => "price", vol => "vol"),
        place_contract_limit_order(product_symbol => "product_symbol", side => "side", price => "price", vol => "vol"),
        place_contract_limit_sell_order(product_symbol => "product_symbol", price => "price", vol => "vol"),
        place_contract_market_buy_order(product_symbol => "product_symbol", vol => "vol"),
        place_contract_market_order(product_symbol => "product_symbol", side => "side", vol => "vol"),
        place_contract_market_sell_order(product_symbol => "product_symbol", vol => "vol"),
        place_contract_order(product_symbol => "product_symbol", side => "side", type_ => "type", open_type => "openType", vol => "vol"),
        place_contract_post_only_buy_order(product_symbol => "product_symbol", price => "price", vol => "vol"),
        place_contract_post_only_order(product_symbol => "product_symbol", side => "side", price => "price", vol => "vol"),
        place_contract_post_only_sell_order(product_symbol => "product_symbol", price => "price", vol => "vol"),
        place_spot_batch_orders(batch_orders => "batchOrders"),
        place_spot_limit_buy_order(product_symbol => "product_symbol", quantity => "quantity", price => "price"),
        place_spot_limit_order(product_symbol => "product_symbol", side => "side", quantity => "quantity", price => "price"),
        place_spot_limit_sell_order(product_symbol => "product_symbol", quantity => "quantity", price => "price"),
        place_spot_market_buy_order(product_symbol => "product_symbol", quote_order_qty => "quoteOrderQty"),
        place_spot_market_order(product_symbol => "product_symbol", side => "side"),
        place_spot_market_sell_order(product_symbol => "product_symbol", quantity => "quantity"),
        place_spot_order(product_symbol => "product_symbol", side => "side", type_ => "type"),
        place_spot_post_only_limit_buy_order(product_symbol => "product_symbol", quantity => "quantity", price => "price"),
        place_spot_post_only_limit_order(product_symbol => "product_symbol", side => "side", quantity => "quantity", price => "price"),
        place_spot_post_only_limit_sell_order(product_symbol => "product_symbol", quantity => "quantity", price => "price"),
        set_spot_mx_deduct(mx_deduct_enable => "mxDeductEnable"),
        test_spot_order(product_symbol => "product_symbol", side => "side", type_ => "type"),
        user_universal_transfer(from_account_type => "fromAccountType", to_account_type => "toAccountType", asset => "asset", amount => "amount"),
    ];
}
