Initial commit

This commit is contained in:
Mrixs committed 2026-10-14 23:04:51 +03:00
commit 02a6dabcfb
62 files changed
+15751

No files matched your search

+78
View File
@@ -0,0 +1,78 @@
package models
import (
"encoding/json"
"gitea.mrixs.me/Mrixs/yandex-music-api-go/internal/utils"
)
// Model is the base interface for all models
type Model interface {
// DeJSON deserializes from JSON
DeJSON(data []byte, c ClientInterface) (Model, error)
// DeList deserializes a list of models
DeList(data []byte, c ClientInterface) ([]Model, error)
// ToJSON serializes to JSON
ToJSON() ([]byte, error)
// ToMap converts to map
ToMap() (map[string]any, error)
}
// BaseModel provides common functionality for models
type BaseModel struct {
Client ClientInterface `json:"-"`
}
// NewBaseModel creates a new BaseModel
func NewBaseModel(c ClientInterface) *BaseModel {
return &BaseModel{Client: c}
}
// DeJSON implements Model.DeJSON for basic models
func (b *BaseModel) DeJSON(data []byte, c ClientInterface) (Model, error) {
// This should be overridden by concrete types
return nil, nil
}
// DeList implements Model.DeList for basic models
func (b *BaseModel) 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 range rawList {
// This should be overridden by concrete types
result = append(result, nil)
}
return result, nil
}
// ToJSON serializes the model to JSON
func (b *BaseModel) ToJSON() ([]byte, error) {
return utils.Marshal(b)
}
// ToMap converts the model to a map
func (b *BaseModel) ToMap() (map[string]any, error) {
data, err := b.ToJSON()
if err != nil {
return nil, err
}
var result map[string]any
if err := json.Unmarshal(data, &result); err != nil {
return nil, err
}
return result, nil
}
// SetClient sets the client on the model
func (b *BaseModel) SetClient(c ClientInterface) {
b.Client = c
}
// GetClient returns the client
func (b *BaseModel) GetClient() ClientInterface {
return b.Client
}