30 lines
692 B
Go
30 lines
692 B
Go
// Package ids demonstrates an application-owned scalar. The framework does not
|
|
// impose this ID policy on any other type or project.
|
|
package ids
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strconv"
|
|
)
|
|
|
|
type ID int64
|
|
|
|
func (id ID) MarshalJSON() ([]byte, error) { return json.Marshal(strconv.FormatInt(int64(id), 10)) }
|
|
func (id *ID) UnmarshalJSON(raw []byte) error {
|
|
value := string(raw)
|
|
if len(raw) > 0 && raw[0] == '"' {
|
|
if err := json.Unmarshal(raw, &value); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return id.UnmarshalText([]byte(value))
|
|
}
|
|
func (id *ID) UnmarshalText(raw []byte) error {
|
|
value, err := strconv.ParseInt(string(raw), 10, 64)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
*id = ID(value)
|
|
return nil
|
|
}
|