58 lines
1 KiB
Go
58 lines
1 KiB
Go
package internal
|
|
|
|
import "encoding/json"
|
|
|
|
// Record is the record representation.
|
|
type Record struct {
|
|
Name string `json:"name"`
|
|
Type string `json:"type"`
|
|
TTL int `json:"ttl,omitempty"`
|
|
|
|
Content Value `json:"content,omitempty"`
|
|
}
|
|
|
|
// Value is the value of a record.
|
|
// Allows to handle dynamic type (string and string array).
|
|
type Value []string
|
|
|
|
func (v Value) MarshalJSON() ([]byte, error) {
|
|
if len(v) == 0 {
|
|
return nil, nil
|
|
}
|
|
|
|
if len(v) == 1 {
|
|
return json.Marshal(v[0])
|
|
}
|
|
|
|
content, err := json.Marshal([]string(v))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return content, nil
|
|
}
|
|
|
|
func (v *Value) UnmarshalJSON(b []byte) error {
|
|
if b[0] == '[' {
|
|
return json.Unmarshal(b, (*[]string)(v))
|
|
}
|
|
|
|
var s string
|
|
if err := json.Unmarshal(b, &s); err != nil {
|
|
return err
|
|
}
|
|
|
|
*v = append(*v, s)
|
|
return nil
|
|
}
|
|
|
|
// Message is the basic response representation.
|
|
// Can be an error.
|
|
type Message struct {
|
|
Message string `json:"message,omitempty"`
|
|
ErrorMsg string `json:"error,omitempty"`
|
|
}
|
|
|
|
func (a Message) Error() string {
|
|
return a.ErrorMsg
|
|
}
|