Files
yandex-music-api-go/internal/models/settings.go
T
MrixsandClaude Code 0456ca0665 Add comprehensive godoc documentation to all exported symbols
- Document all exported types, functions, methods, and constants across 52 files
- Add package-level doc comments to client, models, utils, and ynison packages
- Document HTTP method and endpoint path for each API client method
- Document model struct fields and DeJSON/DeList/ToJSON/ToMap methods
- Fix duplicate package doc comment in internal/models/base.go

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-18 08:57:43 +03:00

363 lines
10 KiB
Go

// Package models provides data models for the Yandex Music API.
package models
import (
"encoding/json"
)
// Experiments represents experiments from the Yandex Music API.
type Experiments struct {
BaseModel
Experiments []ExperimentDetail `json:"experiments"`
Total int `json:"total"`
}
// DeJSON deserializes Experiments from JSON data.
func (e *Experiments) DeJSON(data []byte, client ClientInterface) (Model, error) {
var raw map[string]json.RawMessage
if err := json.Unmarshal(data, &raw); err != nil {
return nil, err
}
experiments := &Experiments{BaseModel: *NewBaseModel(client)}
if v, ok := raw["experiments"]; ok {
var items []ExperimentDetail
json.Unmarshal(v, &items)
experiments.Experiments = items
}
if v, ok := raw["total"]; ok {
json.Unmarshal(v, &experiments.Total)
}
return experiments, nil
}
// DeList deserializes a list of Experiments from JSON data.
func (e *Experiments) DeList(data []byte, client 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 {
e := &Experiments{BaseModel: *NewBaseModel(client)}
if err := json.Unmarshal(item, e); err != nil {
continue
}
result = append(result, e)
}
return result, nil
}
// ExperimentDetail represents experiment details.
type ExperimentDetail struct {
BaseModel
ID string `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
Status string `json:"status"`
Variant string `json:"variant"`
StartDate string `json:"start_date"`
EndDate string `json:"end_date"`
}
// DeJSON deserializes ExperimentDetail from JSON data.
func (e *ExperimentDetail) DeJSON(data []byte, client ClientInterface) (Model, error) {
var raw map[string]json.RawMessage
if err := json.Unmarshal(data, &raw); err != nil {
return nil, err
}
detail := &ExperimentDetail{BaseModel: *NewBaseModel(client)}
if v, ok := raw["id"]; ok {
json.Unmarshal(v, &detail.ID)
}
if v, ok := raw["name"]; ok {
json.Unmarshal(v, &detail.Name)
}
if v, ok := raw["description"]; ok {
json.Unmarshal(v, &detail.Description)
}
if v, ok := raw["status"]; ok {
json.Unmarshal(v, &detail.Status)
}
if v, ok := raw["variant"]; ok {
json.Unmarshal(v, &detail.Variant)
}
if v, ok := raw["start_date"]; ok {
json.Unmarshal(v, &detail.StartDate)
}
if v, ok := raw["end_date"]; ok {
json.Unmarshal(v, &detail.EndDate)
}
return detail, nil
}
// DeList deserializes a list of ExperimentDetails from JSON data.
func (e *ExperimentDetail) DeList(data []byte, client 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 {
detail := &ExperimentDetail{BaseModel: *NewBaseModel(client)}
if err := json.Unmarshal(item, detail); err != nil {
continue
}
result = append(result, detail)
}
return result, nil
}
// Permissions represents user permissions.
type Permissions struct {
BaseModel
CanPlay bool `json:"can_play"`
CanDownload bool `json:"can_download"`
CanLike bool `json:"can_like"`
CanCreatePlaylist bool `json:"can_create_playlist"`
CanSubscribe bool `json:"can_subscribe"`
CanUsePlus bool `json:"can_use_plus"`
CanUseRadio bool `json:"can_use_radio"`
CanUseYnison bool `json:"can_use_ynison"`
CanUseHighQuality bool `json:"can_use_high_quality"`
CanUseLossless bool `json:"can_use_lossless"`
}
// DeJSON deserializes Permissions from JSON data.
func (p *Permissions) DeJSON(data []byte, client ClientInterface) (Model, error) {
var raw map[string]json.RawMessage
if err := json.Unmarshal(data, &raw); err != nil {
return nil, err
}
perms := &Permissions{BaseModel: *NewBaseModel(client)}
if v, ok := raw["can_play"]; ok {
json.Unmarshal(v, &perms.CanPlay)
}
if v, ok := raw["can_download"]; ok {
json.Unmarshal(v, &perms.CanDownload)
}
if v, ok := raw["can_like"]; ok {
json.Unmarshal(v, &perms.CanLike)
}
if v, ok := raw["can_create_playlist"]; ok {
json.Unmarshal(v, &perms.CanCreatePlaylist)
}
if v, ok := raw["can_subscribe"]; ok {
json.Unmarshal(v, &perms.CanSubscribe)
}
if v, ok := raw["can_use_plus"]; ok {
json.Unmarshal(v, &perms.CanUsePlus)
}
if v, ok := raw["can_use_radio"]; ok {
json.Unmarshal(v, &perms.CanUseRadio)
}
if v, ok := raw["can_use_ynison"]; ok {
json.Unmarshal(v, &perms.CanUseYnison)
}
if v, ok := raw["can_use_high_quality"]; ok {
json.Unmarshal(v, &perms.CanUseHighQuality)
}
if v, ok := raw["can_use_lossless"]; ok {
json.Unmarshal(v, &perms.CanUseLossless)
}
return perms, nil
}
// DeList deserializes a list of Permissions from JSON data.
func (p *Permissions) DeList(data []byte, client 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 {
perms := &Permissions{BaseModel: *NewBaseModel(client)}
if err := json.Unmarshal(item, perms); err != nil {
continue
}
result = append(result, perms)
}
return result, nil
}
// PermissionAlerts represents permission alerts.
type PermissionAlerts struct {
BaseModel
Alerts []PermissionAlert `json:"alerts"`
Total int `json:"total"`
}
// DeJSON deserializes PermissionAlerts from JSON data.
func (p *PermissionAlerts) DeJSON(data []byte, client ClientInterface) (Model, error) {
var raw map[string]json.RawMessage
if err := json.Unmarshal(data, &raw); err != nil {
return nil, err
}
alerts := &PermissionAlerts{BaseModel: *NewBaseModel(client)}
if v, ok := raw["alerts"]; ok {
var items []PermissionAlert
json.Unmarshal(v, &items)
alerts.Alerts = items
}
if v, ok := raw["total"]; ok {
json.Unmarshal(v, &alerts.Total)
}
return alerts, nil
}
// DeList deserializes a list of PermissionAlerts from JSON data. from JSON data.
func (p *PermissionAlerts) DeList(data []byte, client 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 {
alerts := &PermissionAlerts{BaseModel: *NewBaseModel(client)}
if err := json.Unmarshal(item, alerts); err != nil {
continue
}
result = append(result, alerts)
}
return result, nil
}
// PermissionAlert represents a permission alert.
type PermissionAlert struct {
BaseModel
ID string `json:"id"`
Type string `json:"type"`
Title string `json:"title"`
Description string `json:"description"`
Action string `json:"action"`
IsRead bool `json:"is_read"`
CreatedAt string `json:"created_at"`
}
// DeJSON deserializes PermissionAlert from JSON data.
func (p *PermissionAlert) DeJSON(data []byte, client ClientInterface) (Model, error) {
var raw map[string]json.RawMessage
if err := json.Unmarshal(data, &raw); err != nil {
return nil, err
}
alert := &PermissionAlert{BaseModel: *NewBaseModel(client)}
if v, ok := raw["id"]; ok {
json.Unmarshal(v, &alert.ID)
}
if v, ok := raw["type"]; ok {
json.Unmarshal(v, &alert.Type)
}
if v, ok := raw["title"]; ok {
json.Unmarshal(v, &alert.Title)
}
if v, ok := raw["description"]; ok {
json.Unmarshal(v, &alert.Description)
}
if v, ok := raw["action"]; ok {
json.Unmarshal(v, &alert.Action)
}
if v, ok := raw["is_read"]; ok {
json.Unmarshal(v, &alert.IsRead)
}
if v, ok := raw["created_at"]; ok {
json.Unmarshal(v, &alert.CreatedAt)
}
return alert, nil
}
// DeList deserializes a list of PermissionAlerts
func (p *PermissionAlert) DeList(data []byte, client 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 {
alert := &PermissionAlert{BaseModel: *NewBaseModel(client)}
if err := json.Unmarshal(item, alert); err != nil {
continue
}
result = append(result, alert)
}
return result, nil
}
// ContentRestrictions represents content restrictions.
type ContentRestrictions struct {
BaseModel
HasExplicitContent bool `json:"has_explicit_content"`
RestrictedRegions []string `json:"restricted_regions"`
AgeRating int `json:"age_rating"`
BlockedTracks []string `json:"blocked_tracks"`
BlockedAlbums []string `json:"blocked_albums"`
BlockedArtists []string `json:"blocked_artists"`
}
// DeJSON deserializes ContentRestrictions from JSON data.
func (c *ContentRestrictions) DeJSON(data []byte, client ClientInterface) (Model, error) {
var raw map[string]json.RawMessage
if err := json.Unmarshal(data, &raw); err != nil {
return nil, err
}
restrictions := &ContentRestrictions{BaseModel: *NewBaseModel(client)}
if v, ok := raw["has_explicit_content"]; ok {
json.Unmarshal(v, &restrictions.HasExplicitContent)
}
if v, ok := raw["restricted_regions"]; ok {
json.Unmarshal(v, &restrictions.RestrictedRegions)
}
if v, ok := raw["age_rating"]; ok {
json.Unmarshal(v, &restrictions.AgeRating)
}
if v, ok := raw["blocked_tracks"]; ok {
json.Unmarshal(v, &restrictions.BlockedTracks)
}
if v, ok := raw["blocked_albums"]; ok {
json.Unmarshal(v, &restrictions.BlockedAlbums)
}
if v, ok := raw["blocked_artists"]; ok {
json.Unmarshal(v, &restrictions.BlockedArtists)
}
return restrictions, nil
}
// DeList deserializes a list of ContentRestrictions from JSON data.
func (c *ContentRestrictions) DeList(data []byte, client 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 {
restrictions := &ContentRestrictions{BaseModel: *NewBaseModel(client)}
if err := json.Unmarshal(item, restrictions); err != nil {
continue
}
result = append(result, restrictions)
}
return result, nil
}