door5/pkg/config/types.go

110 lines
1.4 KiB
Go

package config
type (
Thing uint16
Serial uint8
GPIO uint8
)
const (
I2C Serial = iota
SPI
)
func (s Serial) String() string {
switch s {
case I2C:
return "i2c"
case SPI:
return "spi"
default:
return "unknown"
}
}
func (s *Serial) UnmarshalText(text []byte) error {
switch string(text) {
case "i2c":
*s = I2C
case "spi":
*s = SPI
default:
*s = 0
}
return nil
}
func (s Serial) MarshalText() ([]byte, error) {
return []byte(s.String()), nil
}
const (
Door Thing = iota
Button
NFC
Webcam
Reed
)
func (t Thing) MarshalText() ([]byte, error) {
return []byte(t.String()), nil
}
func (t *Thing) UnmarshalText(text []byte) error {
switch string(text) {
case "Door":
*t = Door
case "Button":
*t = Button
case "NFC":
*t = NFC
case "Webcam":
*t = Webcam
case "Reed":
*t = Reed
default:
*t = 0
}
return nil
}
func (t Thing) MarshalJSON() ([]byte, error) {
return []byte(`"` + t.String() + `"`), nil
}
func (t *Thing) UnmarshalJSON(text []byte) error {
switch string(text) {
case `"Door"`:
*t = Door
case `"Button"`:
*t = Button
case `"NFC"`:
*t = NFC
case `"Webcam"`:
*t = Webcam
case `"Reed"`:
*t = Reed
default:
*t = 0
}
return nil
}
func (t Thing) String() string {
switch t {
case Door:
return "Door"
case Button:
return "Button"
case NFC:
return "NFC"
case Webcam:
return "Webcam"
case Reed:
return "Reed"
default:
return "Unknown"
}
}