diff --git a/pkg/exchange/bitget/bitgetapi/get_account_request.go b/pkg/exchange/bitget/bitgetapi/get_account_request.go index a3ad8743ab..713eb13d71 100644 --- a/pkg/exchange/bitget/bitgetapi/get_account_request.go +++ b/pkg/exchange/bitget/bitgetapi/get_account_request.go @@ -3,15 +3,19 @@ package bitgetapi //go:generate -command GetRequest requestgen -method GET -responseType .APIResponse -responseDataField Data //go:generate -command PostRequest requestgen -method POST -responseType .APIResponse -responseDataField Data -import "github.com/c9s/requestgen" +import ( + "github.com/c9s/requestgen" + + "github.com/c9s/bbgo/pkg/types" +) type Account struct { - UserId string `json:"user_id"` - InviterId string `json:"inviter_id"` - Ips string `json:"ips"` - Authorities []string `json:"authorities"` - ParentId string `json:"parentId"` - Trader bool `json:"trader"` + UserId types.StrInt64 `json:"user_id"` + InviterId types.StrInt64 `json:"inviter_id"` + Ips string `json:"ips"` + Authorities []string `json:"authorities"` + ParentId types.StrInt64 `json:"parentId"` + Trader bool `json:"trader"` } //go:generate GetRequest -url "/api/spot/v1/account/getInfo" -type GetAccountRequest -responseDataType .Account diff --git a/pkg/exchange/bitget/bitgetapi/get_fills_request.go b/pkg/exchange/bitget/bitgetapi/get_fills_request.go index 2d80b76754..0172f0cfb3 100644 --- a/pkg/exchange/bitget/bitgetapi/get_fills_request.go +++ b/pkg/exchange/bitget/bitgetapi/get_fills_request.go @@ -11,10 +11,10 @@ import ( ) type Fill struct { - AccountId string `json:"accountId"` + AccountId types.StrInt64 `json:"accountId"` Symbol string `json:"symbol"` - OrderId string `json:"orderId"` - FillId string `json:"fillId"` + OrderId types.StrInt64 `json:"orderId"` + FillId types.StrInt64 `json:"fillId"` OrderType OrderType `json:"orderType"` Side OrderSide `json:"side"` FillPrice fixedpoint.Value `json:"fillPrice"` diff --git a/pkg/exchange/bitget/bitgetapi/get_order_detail_request.go b/pkg/exchange/bitget/bitgetapi/get_order_detail_request.go index 4f7e09b32f..aa5cca0a85 100644 --- a/pkg/exchange/bitget/bitgetapi/get_order_detail_request.go +++ b/pkg/exchange/bitget/bitgetapi/get_order_detail_request.go @@ -11,9 +11,9 @@ import ( ) type OrderDetail struct { - AccountId string `json:"accountId"` + AccountId types.StrInt64 `json:"accountId"` Symbol string `json:"symbol"` - OrderId string `json:"orderId"` + OrderId types.StrInt64 `json:"orderId"` ClientOrderId string `json:"clientOrderId"` Price fixedpoint.Value `json:"price"` Quantity fixedpoint.Value `json:"quantity"` diff --git a/pkg/types/strint.go b/pkg/types/strint.go new file mode 100644 index 0000000000..c5270d525a --- /dev/null +++ b/pkg/types/strint.go @@ -0,0 +1,43 @@ +package types + +import ( + "encoding/json" + "fmt" + "strconv" +) + +type StrInt64 int64 + +func (s *StrInt64) MarshalJSON() ([]byte, error) { + ss := strconv.FormatInt(int64(*s), 10) + return json.Marshal(ss) +} + +func (s *StrInt64) UnmarshalJSON(body []byte) error { + var arg interface{} + if err := json.Unmarshal(body, &arg); err != nil { + return err + } + + switch ta := arg.(type) { + case string: + // parse string + i, err := strconv.ParseInt(ta, 10, 64) + if err != nil { + return err + } + *s = StrInt64(i) + + case int64: + *s = StrInt64(ta) + case int32: + *s = StrInt64(ta) + case int: + *s = StrInt64(ta) + + default: + return fmt.Errorf("StrInt64 error: unsupported value type %T", ta) + } + + return nil +}