// Package models provides data models for the Yandex Music API. package models import ( "encoding/json" ) // ArtistTracks represents a page of tracks by an artist. type ArtistTracks struct { BaseModel Tracks []Track `json:"tracks"` Pager *Pager `json:"pager"` } // DeJSON deserializes an ArtistTracks from JSON data. func (at *ArtistTracks) DeJSON(data []byte, c ClientInterface) (Model, error) { var raw map[string]json.RawMessage if err := json.Unmarshal(data, &raw); err != nil { return nil, err } tracks := &ArtistTracks{BaseModel: *NewBaseModel(c)} if v, ok := raw["tracks"]; ok { var trackList []Track if err := json.Unmarshal(v, &trackList); err == nil { tracks.Tracks = trackList } } if v, ok := raw["pager"]; ok { var pager Pager if err := json.Unmarshal(v, &pager); err == nil { tracks.Pager = &pager } } return tracks, nil } // DeList deserializes a list of ArtistTracks from JSON data. func (at *ArtistTracks) DeList(data []byte, c ClientInterface) ([]Model, error) { var rawList []json.RawMessage if err := json.Unmarshal(data, &rawList); err != nil { return nil, err } result := make([]Model, 0, len(rawList)) for _, item := range rawList { tracks := &ArtistTracks{BaseModel: *NewBaseModel(c)} if err := json.Unmarshal(item, tracks); err != nil { continue } result = append(result, tracks) } return result, nil }