mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2024-12-14 18:51:34 +03:00
2eb21ef409
Merge in DNS/adguard-home from 2653-ra-slaac to master Updates #2653. Squashed commit of the following: commit f261413a58dc813e37cc848606ed490b8c0ac9f3 Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Thu Feb 11 20:37:13 2021 +0300 all: doc changes, rm debug commit 4a8c6e4897579493c1ca242fb8f0f440c3b51a74 Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Thu Feb 11 20:11:46 2021 +0300 dhcpd: do not override ra-slaac settings
59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package dhcpd
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
)
|
|
|
|
// nullBool is a nullable boolean. Use these in JSON requests and responses
|
|
// instead of pointers to bool.
|
|
//
|
|
// TODO(a.garipov): Inspect uses of *bool, move this type into some new package
|
|
// if we need it somewhere else.
|
|
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
|
|
}
|
|
|
|
// 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("invalid nullBool value %q", b)
|
|
}
|
|
|
|
return nil
|
|
}
|