mirror of
https://github.com/retailcrm/api-client-go.git
synced 2024-11-21 20:36:03 +03:00
fix order[items][][properties][]
unmarshaling for empty values
This commit is contained in:
commit
8cfe7034e6
@ -92,6 +92,40 @@ func (p *OrderPayments) UnmarshalJSON(data []byte) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *Properties) UnmarshalJSON(data []byte) error {
|
||||||
|
var i interface{}
|
||||||
|
var m Properties
|
||||||
|
if err := json.Unmarshal(data, &i); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch e := i.(type) {
|
||||||
|
case map[string]interface{}:
|
||||||
|
m = make(Properties, len(e))
|
||||||
|
for idx, val := range e {
|
||||||
|
var res Property
|
||||||
|
err := unmarshalMap(val.(map[string]interface{}), &res)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
m[idx] = res
|
||||||
|
}
|
||||||
|
case []interface{}:
|
||||||
|
m = make(Properties, len(e))
|
||||||
|
for idx, val := range e {
|
||||||
|
var res Property
|
||||||
|
err := unmarshalMap(val.(map[string]interface{}), &res)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
m[strconv.Itoa(idx)] = res
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*p = m
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func unmarshalMap(m map[string]interface{}, v interface{}) (err error) {
|
func unmarshalMap(m map[string]interface{}, v interface{}) (err error) {
|
||||||
var data []byte
|
var data []byte
|
||||||
data, err = json.Marshal(m)
|
data, err = json.Marshal(m)
|
||||||
|
@ -38,6 +38,9 @@ func TestAPIErrorsList_UnmarshalJSON(t *testing.T) {
|
|||||||
assert.Len(t, list, 2)
|
assert.Len(t, list, 2)
|
||||||
assert.Equal(t, list["a"], "first")
|
assert.Equal(t, list["a"], "first")
|
||||||
assert.Equal(t, list["b"], "second")
|
assert.Equal(t, list["b"], "second")
|
||||||
|
|
||||||
|
require.NoError(t, json.Unmarshal([]byte(`[]`), &list))
|
||||||
|
assert.Len(t, list, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCustomFieldsList_UnmarshalJSON(t *testing.T) {
|
func TestCustomFieldsList_UnmarshalJSON(t *testing.T) {
|
||||||
@ -52,6 +55,9 @@ func TestCustomFieldsList_UnmarshalJSON(t *testing.T) {
|
|||||||
assert.Len(t, list, 2)
|
assert.Len(t, list, 2)
|
||||||
assert.Equal(t, list["a"], "first")
|
assert.Equal(t, list["a"], "first")
|
||||||
assert.Equal(t, list["b"], "second")
|
assert.Equal(t, list["b"], "second")
|
||||||
|
|
||||||
|
require.NoError(t, json.Unmarshal([]byte(`[]`), &list))
|
||||||
|
assert.Len(t, list, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestOrderPayments_UnmarshalJSON(t *testing.T) {
|
func TestOrderPayments_UnmarshalJSON(t *testing.T) {
|
||||||
@ -66,4 +72,24 @@ func TestOrderPayments_UnmarshalJSON(t *testing.T) {
|
|||||||
assert.Len(t, list, 2)
|
assert.Len(t, list, 2)
|
||||||
assert.Equal(t, list["a"], OrderPayment{ID: 1})
|
assert.Equal(t, list["a"], OrderPayment{ID: 1})
|
||||||
assert.Equal(t, list["b"], OrderPayment{ID: 2})
|
assert.Equal(t, list["b"], OrderPayment{ID: 2})
|
||||||
|
|
||||||
|
require.NoError(t, json.Unmarshal([]byte(`[]`), &list))
|
||||||
|
assert.Len(t, list, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestProperties_UnmarshalJSON(t *testing.T) {
|
||||||
|
var list Properties
|
||||||
|
|
||||||
|
require.NoError(t, json.Unmarshal([]byte(`[{"code": "first"}, {"code": "second"}]`), &list))
|
||||||
|
assert.Len(t, list, 2)
|
||||||
|
assert.Equal(t, list["0"], Property{Code: "first"})
|
||||||
|
assert.Equal(t, list["1"], Property{Code: "second"})
|
||||||
|
|
||||||
|
require.NoError(t, json.Unmarshal([]byte(`{"a": {"code": "first"}, "b": {"code": "second"}}`), &list))
|
||||||
|
assert.Len(t, list, 2)
|
||||||
|
assert.Equal(t, list["a"], Property{Code: "first"})
|
||||||
|
assert.Equal(t, list["b"], Property{Code: "second"})
|
||||||
|
|
||||||
|
require.NoError(t, json.Unmarshal([]byte(`[]`), &list))
|
||||||
|
assert.Len(t, list, 0)
|
||||||
}
|
}
|
||||||
|
33
types.go
33
types.go
@ -275,6 +275,7 @@ Order related types
|
|||||||
|
|
||||||
type OrderPayments map[string]OrderPayment
|
type OrderPayments map[string]OrderPayment
|
||||||
type StringMap map[string]string
|
type StringMap map[string]string
|
||||||
|
type Properties map[string]Property
|
||||||
|
|
||||||
// Order type.
|
// Order type.
|
||||||
type Order struct {
|
type Order struct {
|
||||||
@ -442,22 +443,22 @@ type OrderPayment struct {
|
|||||||
|
|
||||||
// OrderItem type.
|
// OrderItem type.
|
||||||
type OrderItem struct {
|
type OrderItem struct {
|
||||||
ID int `json:"id,omitempty"`
|
ID int `json:"id,omitempty"`
|
||||||
InitialPrice float32 `json:"initialPrice,omitempty"`
|
InitialPrice float32 `json:"initialPrice,omitempty"`
|
||||||
PurchasePrice float32 `json:"purchasePrice,omitempty"`
|
PurchasePrice float32 `json:"purchasePrice,omitempty"`
|
||||||
DiscountTotal float32 `json:"discountTotal,omitempty"`
|
DiscountTotal float32 `json:"discountTotal,omitempty"`
|
||||||
DiscountManualAmount float32 `json:"discountManualAmount,omitempty"`
|
DiscountManualAmount float32 `json:"discountManualAmount,omitempty"`
|
||||||
DiscountManualPercent float32 `json:"discountManualPercent,omitempty"`
|
DiscountManualPercent float32 `json:"discountManualPercent,omitempty"`
|
||||||
ProductName string `json:"productName,omitempty"`
|
ProductName string `json:"productName,omitempty"`
|
||||||
VatRate string `json:"vatRate,omitempty"`
|
VatRate string `json:"vatRate,omitempty"`
|
||||||
CreatedAt string `json:"createdAt,omitempty"`
|
CreatedAt string `json:"createdAt,omitempty"`
|
||||||
Quantity float32 `json:"quantity,omitempty"`
|
Quantity float32 `json:"quantity,omitempty"`
|
||||||
Status string `json:"status,omitempty"`
|
Status string `json:"status,omitempty"`
|
||||||
Comment string `json:"comment,omitempty"`
|
Comment string `json:"comment,omitempty"`
|
||||||
IsCanceled bool `json:"isCanceled,omitempty"`
|
IsCanceled bool `json:"isCanceled,omitempty"`
|
||||||
Offer Offer `json:"offer,omitempty"`
|
Offer Offer `json:"offer,omitempty"`
|
||||||
Properties map[string]Property `json:"properties,omitempty"`
|
Properties Properties `json:"properties,omitempty"`
|
||||||
PriceType *PriceType `json:"priceType,omitempty"`
|
PriceType *PriceType `json:"priceType,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// OrdersHistoryRecord type.
|
// OrdersHistoryRecord type.
|
||||||
|
Loading…
Reference in New Issue
Block a user