use super::client::GateioClient;

crate::exchanges::impl_exchange_method_wrappers! {
    GateioClient;
    public [
        get_all_delivery_contracts(),
        get_all_futures_contracts(),
        get_a_single_futures_contract(product_symbol => "product_symbol"),
        get_contract_kline(product_symbol => "product_symbol"),
        get_contract_list_tickers(product_symbol => "product_symbol"),
        get_contract_order_book(product_symbol => "product_symbol"),
        get_futures_contract_stats(product_symbol => "product_symbol"),
        get_futures_funding_rate_history(product_symbol => "product_symbol"),
        get_spot_all_currency_pairs(),
        get_spot_kline(product_symbol => "product_symbol"),
        get_spot_list_tickers(product_symbol => "product_symbol"),
        get_spot_order_book(product_symbol => "product_symbol"),
    ];
    private [
        amend_futures_single_order(order_id => "order_id"),
        amend_spot_single_order(order_id => "order_id"),
        cancel_contract_all_order_matched(product_symbol => "product_symbol"),
        cancel_contract_single_order(order_id => "order_id"),
        cancel_spot_order(),
        cancel_spot_single_order(order_id => "order_id", product_symbol => "product_symbol"),
        future_dual_mode_switch(dual_mode => "dual_mode"),
        get_contract_order_list(status => "status"),
        get_contract_single_order(order_id => "order_id"),
        get_contract_single_positions(product_symbol => "product_symbol"),
        get_delivery_account(),
        get_delivery_account_book(),
        get_delivery_all_positions(),
        get_delivery_position_close_history(product_symbol => "product_symbol"),
        get_futures_account(),
        get_futures_account_book(),
        get_futures_all_positions(),
        get_futures_auto_deleveraging_history(product_symbol => "product_symbol"),
        get_futures_position_close_history(product_symbol => "product_symbol"),
        get_spot_account(),
        get_spot_account_book(),
        get_spot_batch_fee(product_symbols => "product_symbols"),
        get_spot_fee(),
        get_spot_open_orders(),
        get_spot_order_list(product_symbol => "product_symbol", status => "status"),
        get_spot_single_order(order_id => "order_id", product_symbol => "product_symbol"),
        get_spot_trading_history(),
        get_total_balance(),
        get_trading_history(product_symbol => "product_symbol"),
        get_unified_accounts(),
        place_contract_limit_buy_order(product_symbol => "product_symbol", size => "size", price => "price"),
        place_contract_limit_order(product_symbol => "product_symbol", size => "size", price => "price"),
        place_contract_limit_sell_order(product_symbol => "product_symbol", size => "size", price => "price"),
        place_contract_market_buy_order(product_symbol => "product_symbol", size => "size"),
        place_contract_market_order(product_symbol => "product_symbol", size => "size"),
        place_contract_market_sell_order(product_symbol => "product_symbol", size => "size"),
        place_contract_order(product_symbol => "product_symbol", size => "size"),
        place_contract_post_only_limit_buy_order(product_symbol => "product_symbol", size => "size", price => "price"),
        place_contract_post_only_limit_order(product_symbol => "product_symbol", size => "size", price => "price"),
        place_contract_post_only_limit_sell_order(product_symbol => "product_symbol", size => "size", price => "price"),
        place_futures_batch_order(orders => "orders"),
        place_spot_limit_buy_order(product_symbol => "product_symbol", amount => "amount", price => "price"),
        place_spot_limit_order(product_symbol => "product_symbol", side => "side", amount => "amount", price => "price"),
        place_spot_limit_sell_order(product_symbol => "product_symbol", amount => "amount", price => "price"),
        place_spot_market_buy_order(product_symbol => "product_symbol", amount => "amount"),
        place_spot_market_order(product_symbol => "product_symbol", side => "side", amount => "amount"),
        place_spot_market_sell_order(product_symbol => "product_symbol", amount => "amount"),
        place_spot_order(product_symbol => "product_symbol", side => "side", amount => "amount"),
        place_spot_post_only_limit_buy_order(product_symbol => "product_symbol", amount => "amount", price => "price"),
        place_spot_post_only_limit_order(product_symbol => "product_symbol", side => "side", amount => "amount", price => "price"),
        place_spot_post_only_limit_sell_order(product_symbol => "product_symbol", amount => "amount", price => "price"),
        update_delivery_positions_leverage(product_symbol => "product_symbol", leverage => "leverage"),
        update_futures_positions_leverage(product_symbol => "product_symbol", leverage => "leverage"),
        wallet_transfer(currency => "currency", from_account => "from", to_account => "to", amount => "amount"),
    ];
}
