package flag //go:generate stringer -type=Flag -linecomment type Flag int const ( String Flag = 0 // string Required Flag = 1 << iota // required Array // array Int // int Int64 // int64 Uint // uint Uint64 // uint64 Float64 // float64 Bool // bool Duration // duration Time // time Any // any ) func (i Flag) With(v Flag) Flag { return i | v } func (i Flag) IsString() bool { return i|Required|Array^Required^Array == 0 } func (i Flag) IsRequired() bool { return i&Required > 0 } func (i Flag) IsArray() bool { return i&Array > 0 } func (i Flag) IsInt() bool { return i&Int > 0 } func (i Flag) IsInt64() bool { return i&Int64 > 0 } func (i Flag) IsUint() bool { return i&Uint > 0 } func (i Flag) IsUint64() bool { return i&Uint64 > 0 } func (i Flag) IsFloat64() bool { return i&Float64 > 0 } func (i Flag) IsBool() bool { return i&Bool > 0 } func (i Flag) IsDuration() bool { return i&Duration > 0 } func (i Flag) IsTime() bool { return i&Time > 0 } func (i Flag) IsAny() bool { return i&Any > 0 } func (i Flag) Type() Flag { switch { case i.IsInt(): return Int case i.IsInt64(): return Int64 case i.IsUint(): return Uint case i.IsUint64(): return Uint64 case i.IsFloat64(): return Float64 case i.IsBool(): return Bool case i.IsDuration(): return Duration case i.IsTime(): return Time case i.IsAny(): return Any default: return String } }