50 lines
861 B
Go
50 lines
861 B
Go
package mastodon
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"strconv"
|
|
)
|
|
|
|
type ID string
|
|
|
|
func (id *ID) UnmarshalJSON(data []byte) error {
|
|
if len(data) > 0 && data[0] == '"' && data[len(data)-1] == '"' {
|
|
var s string
|
|
if err := json.Unmarshal(data, &s); err != nil {
|
|
return err
|
|
}
|
|
*id = ID(s)
|
|
return nil
|
|
}
|
|
var n int64
|
|
if err := json.Unmarshal(data, &n); err != nil {
|
|
return err
|
|
}
|
|
*id = ID(fmt.Sprint(n))
|
|
return nil
|
|
}
|
|
|
|
type Sbool bool
|
|
|
|
func (s *Sbool) UnmarshalJSON(data []byte) error {
|
|
if len(data) > 0 && data[0] == '"' && data[len(data)-1] == '"' {
|
|
var str string
|
|
if err := json.Unmarshal(data, &str); err != nil {
|
|
return err
|
|
}
|
|
b, err := strconv.ParseBool(str)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
*s = Sbool(b)
|
|
return nil
|
|
}
|
|
var b bool
|
|
if err := json.Unmarshal(data, &b); err != nil {
|
|
return err
|
|
}
|
|
*s = Sbool(b)
|
|
return nil
|
|
}
|