44 lines
687 B
Go
44 lines
687 B
Go
package merch
|
|
|
|
import (
|
|
"database/sql/driver"
|
|
"encoding/json"
|
|
"strings"
|
|
)
|
|
|
|
type Origin int
|
|
|
|
const (
|
|
surugaya = (iota + 1) * 1000
|
|
mandarake
|
|
)
|
|
|
|
var Origins = [...]string{
|
|
"surugaya",
|
|
"mandarake",
|
|
}
|
|
|
|
func (o Origin) String() string {
|
|
index := (int(o) / 1000) - 1
|
|
if index < 0 || index >= len(Origins) {
|
|
return "unknown"
|
|
}
|
|
return Origins[index]
|
|
}
|
|
|
|
func (o Origin) MarshalJSON() ([]byte, error) {
|
|
return json.Marshal(o.String())
|
|
}
|
|
|
|
func parseOrigin(s string) (Origin, bool) {
|
|
for i, name := range Origins {
|
|
if name == strings.ToLower(s) {
|
|
return Origin((i + 1) * 1000), true
|
|
}
|
|
}
|
|
return 0, false
|
|
}
|
|
|
|
func (o Origin) Value() (driver.Value, error) {
|
|
return int(o), nil
|
|
}
|