diff options
Diffstat (limited to 'vendor/github.com/SevereCloud/vksdk/v2/object/object.go')
-rw-r--r-- | vendor/github.com/SevereCloud/vksdk/v2/object/object.go | 71 |
1 files changed, 70 insertions, 1 deletions
diff --git a/vendor/github.com/SevereCloud/vksdk/v2/object/object.go b/vendor/github.com/SevereCloud/vksdk/v2/object/object.go index e6c89efd..e03e7f3b 100644 --- a/vendor/github.com/SevereCloud/vksdk/v2/object/object.go +++ b/vendor/github.com/SevereCloud/vksdk/v2/object/object.go @@ -9,6 +9,8 @@ import ( "bytes" "encoding/json" "reflect" + + "github.com/vmihailenco/msgpack/v5" ) // Attachment interface. @@ -42,6 +44,44 @@ func (b *BaseBoolInt) UnmarshalJSON(data []byte) (err error) { return } +// DecodeMsgpack func. +func (b *BaseBoolInt) DecodeMsgpack(dec *msgpack.Decoder) (err error) { + data, err := dec.DecodeRaw() + if err != nil { + return err + } + + var ( + valueInt int + valueBool bool + ) + + switch { + case msgpack.Unmarshal(data, &valueBool) == nil: + *b = BaseBoolInt(valueBool) + case msgpack.Unmarshal(data, &valueInt) == nil: + if valueInt == 1 { + *b = true + break + } + + if valueInt == 0 { + *b = false + break + } + + fallthrough + default: + // return msgpack error + err = &json.UnmarshalTypeError{ + Value: string(data), + Type: reflect.TypeOf((*BaseBoolInt)(nil)), + } + } + + return err +} + // BaseCountry struct. type BaseCountry struct { ID int `json:"id"` @@ -151,6 +191,33 @@ func (obj *BaseImage) UnmarshalJSON(data []byte) (err error) { return err } +// DecodeMsgpack is required to support images with `src` field. +func (obj *BaseImage) DecodeMsgpack(dec *msgpack.Decoder) (err error) { + type renamedBaseImage struct { + Height float64 `msgpack:"height"` + URL string `msgpack:"url"` + Src string `msgpack:"src"` + Width float64 `msgpack:"width"` + Type string `msgpack:"type"` + } + + var renamedObj renamedBaseImage + + err = dec.Decode(&renamedObj) + + obj.Height = renamedObj.Height + obj.Width = renamedObj.Width + obj.Type = renamedObj.Type + + if renamedObj.Src == "" { + obj.URL = renamedObj.URL + } else { + obj.URL = renamedObj.Src + } + + return err +} + // BaseLikes struct. type BaseLikes struct { UserLikes BaseBoolInt `json:"user_likes"` // Information whether current user likes @@ -346,9 +413,11 @@ const ( type Privacy struct { Category PrivacyCategory `json:"category,omitempty"` Lists struct { - Allowed []int `json:"allowed"` + Allowed []int `json:"allowed"` + Excluded []int `json:"excluded"` } `json:"lists,omitempty"` Owners struct { + Allowed []int `json:"allowed"` Excluded []int `json:"excluded"` } `json:"owners,omitempty"` } |