package config import "strconv" // Flag represents a nullable boolean value that is considered null until // either parsed from YAML or merged in from another Flag value. // type Flag struct { True bool set bool } // UnmarshalJSON implements json.Unmarshaler to parse the underlying boolean // value and detect that the Flag should no longer be considered null. // func (flag *Flag) UnmarshalJSON(unmarshal []byte) error { var err error flag.True, err = strconv.ParseBool(string(unmarshal)) if err != nil { return err } flag.set = true return nil } // Merge takes another flag and, if set, merged its boolean value into this // one. // func (flag *Flag) Merge(flag2 Flag) { if flag2.set { flag.True = flag2.True flag.set = true } }