talos/pkg/machinery/nethelpers/address_flags.go
Dmitriy Matrenichev 8e9fc13d7c
feat: implement enum generator for proto files
`structprotogen` now supports generating enums directly instead of using predeclared file and hardcoded types. To use this functionality, simply put `structprotogen:gen_enum` in the comment above const block, you want to have the proto definitions for.

Closes #6215

Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
2023-01-11 16:02:21 +03:00

78 lines
2.1 KiB
Go

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package nethelpers
//go:generate enumer -type=AddressFlag -linecomment -text
import (
"strings"
)
// AddressFlags is a bitmask of AddressFlag.
type AddressFlags uint32
func (flags AddressFlags) String() string {
var values []string
for flag := AddressTemporary; flag <= AddressStablePrivacy; flag <<= 1 {
if (AddressFlag(flags) & flag) == flag {
values = append(values, flag.String())
}
}
return strings.Join(values, ",")
}
// AddressFlagsString converts string representation of flags into AddressFlags.
func AddressFlagsString(s string) (AddressFlags, error) {
flags := AddressFlags(0)
for _, p := range strings.Split(s, ",") {
flag, err := AddressFlagString(p)
if err != nil {
return flags, err
}
flags |= AddressFlags(flag)
}
return flags, nil
}
// MarshalText implements text.Marshaler.
func (flags AddressFlags) MarshalText() ([]byte, error) {
return []byte(flags.String()), nil
}
// UnmarshalText implements text.Unmarshaler.
func (flags *AddressFlags) UnmarshalText(b []byte) error {
var err error
*flags, err = AddressFlagsString(string(b))
return err
}
// AddressFlag wraps IFF_* constants.
type AddressFlag uint32
// AddressFlag constants.
//
//structprotogen:gen_enum
const (
AddressTemporary AddressFlag = 1 << iota // temporary
AddressNoDAD // nodad
AddressOptimistic // optimistic
AddressDADFailed // dadfailed
AddressHome // homeaddress
AddressDeprecated // deprecated
AddressTentative // tentative
AddressPermanent // permanent
AddressManagementTemp // mngmtmpaddr
AddressNoPrefixRoute // noprefixroute
AddressMCAutoJoin // mcautojoin
AddressStablePrivacy // stableprivacy
)