59 lines
1 KiB
Go
59 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
|
||
|
}
|