mirror of
https://github.com/APIParkLab/APIPark.git
synced 2026-06-14 20:41:15 +08:00
61 lines
1.3 KiB
Go
61 lines
1.3 KiB
Go
package entity
|
|
|
|
import (
|
|
"encoding/json"
|
|
)
|
|
|
|
type BasicInfo struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Description string `json:"description"`
|
|
Driver string `json:"driver"`
|
|
Version string `json:"version"`
|
|
Matches map[string]string `json:"matches"`
|
|
}
|
|
|
|
type WorkerItem[T any] struct {
|
|
Basic *BasicInfo
|
|
Attr *T
|
|
}
|
|
|
|
func NewWorkerItem[T any](basic *BasicInfo, attr *T) *WorkerItem[T] {
|
|
return &WorkerItem[T]{Basic: basic, Attr: attr}
|
|
}
|
|
|
|
func (w *WorkerItem[T]) MarshalJSON() ([]byte, error) {
|
|
data, err := json.Marshal(w.Attr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
attr := make(map[string]interface{})
|
|
err = json.Unmarshal(data, &attr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
attr["id"] = w.Basic.ID
|
|
attr["name"] = w.Basic.Name
|
|
attr["description"] = w.Basic.Description
|
|
attr["driver"] = w.Basic.Driver
|
|
attr["version"] = w.Basic.Version
|
|
attr["matches"] = w.Basic.Matches
|
|
|
|
return json.Marshal(attr)
|
|
}
|
|
|
|
func (w *WorkerItem[T]) UnmarshalJSON(bytes []byte) error {
|
|
attr := new(T)
|
|
err := json.Unmarshal(bytes, attr)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
basicInfo := new(BasicInfo)
|
|
err = json.Unmarshal(bytes, basicInfo)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
w.Basic = basicInfo
|
|
w.Attr = attr
|
|
return nil
|
|
}
|