110 lines
1.4 KiB
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"
|
|
}
|
|
|
|
}
|