mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2025-01-08 06:57:21 +03:00
7b9cfa94f8
Merge in DNS/adguard-home from imp-updater to master Squashed commit of the following: commit 6ed487359e56a35b36f13dcbf2efbf2a7a2d8734 Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Thu Jun 9 16:29:35 2022 +0300 all: imp logs, err handling commit e930044cb619a43e5a44c230dadbe2228e9a93f5 Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Thu Jun 9 15:53:35 2022 +0300 all: imp updater
59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package aghalg
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
)
|
|
|
|
// NullBool is a nullable boolean. Use these in JSON requests and responses
|
|
// instead of pointers to bool.
|
|
type NullBool uint8
|
|
|
|
// NullBool values
|
|
const (
|
|
NBNull NullBool = iota
|
|
NBTrue
|
|
NBFalse
|
|
)
|
|
|
|
// String implements the fmt.Stringer interface for NullBool.
|
|
func (nb NullBool) String() (s string) {
|
|
switch nb {
|
|
case NBNull:
|
|
return "null"
|
|
case NBTrue:
|
|
return "true"
|
|
case NBFalse:
|
|
return "false"
|
|
}
|
|
|
|
return fmt.Sprintf("!invalid NullBool %d", uint8(nb))
|
|
}
|
|
|
|
// BoolToNullBool converts a bool into a NullBool.
|
|
func BoolToNullBool(cond bool) (nb NullBool) {
|
|
if cond {
|
|
return NBTrue
|
|
}
|
|
|
|
return NBFalse
|
|
}
|
|
|
|
// type check
|
|
var _ json.Unmarshaler = (*NullBool)(nil)
|
|
|
|
// UnmarshalJSON implements the json.Unmarshaler interface for *NullBool.
|
|
func (nb *NullBool) UnmarshalJSON(b []byte) (err error) {
|
|
if len(b) == 0 || bytes.Equal(b, []byte("null")) {
|
|
*nb = NBNull
|
|
} else if bytes.Equal(b, []byte("true")) {
|
|
*nb = NBTrue
|
|
} else if bytes.Equal(b, []byte("false")) {
|
|
*nb = NBFalse
|
|
} else {
|
|
return fmt.Errorf("unmarshalling json data into aghalg.NullBool: bad value %q", b)
|
|
}
|
|
|
|
return nil
|
|
}
|