# -*- coding: utf-8 -*-

# PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
# https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code

from ccxt.pro.binance import binance
from ccxt.base.types import Any
from ccxt.base.errors import InvalidOrder

import ccxt.async_support.binanceusdm as binanceusdmRest


class binanceusdm(binance):

    def describe(self) -> Any:
        # eslint-disable-next-line new-cap
        restInstance = binanceusdmRest()
        restDescribe = restInstance.describe()
        extended = self.deep_extend(super(binanceusdm, self).describe(), restDescribe)
        return self.deep_extend(extended, {
            'id': 'binanceusdm',
            'name': 'Binance USDⓈ-M',
            'urls': {
                'logo': 'https://user-images.githubusercontent.com/1294454/117738721-668c8d80-b205-11eb-8c49-3fad84c4a07f.jpg',
                'doc': 'https://developers.binance.com/en',
            },
            'options': {
                'fetchMarkets': {
                    'types': ['linear'],
                },
                'defaultSubType': 'linear',
            },
            # https://binance-docs.github.io/apidocs/futures/en/#error-codes
            # https://developers.binance.com/docs/derivatives/usds-margined-futures/error-code
            'exceptions': {
                'exact': {
                    '-5021': InvalidOrder,  # {"code":-5021,"msg":"Due to the order could not be filled immediately, the FOK order has been rejected."}
                    '-5022': InvalidOrder,  # {"code":-5022,"msg":"Due to the order could not be executed, the Post Only order will be rejected."}
                    '-5028': InvalidOrder,  # {"code":-5028,"msg":"Timestamp for self request is outside of the ME recvWindow."}
                },
            },
        })
