github.com/bluenviron/gomavlib/v2@v2.2.1-0.20240308101627-2c07e3da629c/pkg/dialects/common/enum_ais_flags.go (about)

     1  //autogenerated:yes
     2  //nolint:revive,misspell,govet,lll,dupl,gocritic
     3  package common
     4  
     5  import (
     6  	"fmt"
     7  	"strconv"
     8  	"strings"
     9  )
    10  
    11  // These flags are used in the AIS_VESSEL.fields bitmask to indicate validity of data in the other message fields. When set, the data is valid.
    12  type AIS_FLAGS uint64
    13  
    14  const (
    15  	// 1 = Position accuracy less than 10m, 0 = position accuracy greater than 10m.
    16  	AIS_FLAGS_POSITION_ACCURACY AIS_FLAGS = 1
    17  	AIS_FLAGS_VALID_COG         AIS_FLAGS = 2
    18  	AIS_FLAGS_VALID_VELOCITY    AIS_FLAGS = 4
    19  	// 1 = Velocity over 52.5765m/s (102.2 knots)
    20  	AIS_FLAGS_HIGH_VELOCITY   AIS_FLAGS = 8
    21  	AIS_FLAGS_VALID_TURN_RATE AIS_FLAGS = 16
    22  	// Only the sign of the returned turn rate value is valid, either greater than 5deg/30s or less than -5deg/30s
    23  	AIS_FLAGS_TURN_RATE_SIGN_ONLY AIS_FLAGS = 32
    24  	AIS_FLAGS_VALID_DIMENSIONS    AIS_FLAGS = 64
    25  	// Distance to bow is larger than 511m
    26  	AIS_FLAGS_LARGE_BOW_DIMENSION AIS_FLAGS = 128
    27  	// Distance to stern is larger than 511m
    28  	AIS_FLAGS_LARGE_STERN_DIMENSION AIS_FLAGS = 256
    29  	// Distance to port side is larger than 63m
    30  	AIS_FLAGS_LARGE_PORT_DIMENSION AIS_FLAGS = 512
    31  	// Distance to starboard side is larger than 63m
    32  	AIS_FLAGS_LARGE_STARBOARD_DIMENSION AIS_FLAGS = 1024
    33  	AIS_FLAGS_VALID_CALLSIGN            AIS_FLAGS = 2048
    34  	AIS_FLAGS_VALID_NAME                AIS_FLAGS = 4096
    35  )
    36  
    37  var labels_AIS_FLAGS = map[AIS_FLAGS]string{
    38  	AIS_FLAGS_POSITION_ACCURACY:         "AIS_FLAGS_POSITION_ACCURACY",
    39  	AIS_FLAGS_VALID_COG:                 "AIS_FLAGS_VALID_COG",
    40  	AIS_FLAGS_VALID_VELOCITY:            "AIS_FLAGS_VALID_VELOCITY",
    41  	AIS_FLAGS_HIGH_VELOCITY:             "AIS_FLAGS_HIGH_VELOCITY",
    42  	AIS_FLAGS_VALID_TURN_RATE:           "AIS_FLAGS_VALID_TURN_RATE",
    43  	AIS_FLAGS_TURN_RATE_SIGN_ONLY:       "AIS_FLAGS_TURN_RATE_SIGN_ONLY",
    44  	AIS_FLAGS_VALID_DIMENSIONS:          "AIS_FLAGS_VALID_DIMENSIONS",
    45  	AIS_FLAGS_LARGE_BOW_DIMENSION:       "AIS_FLAGS_LARGE_BOW_DIMENSION",
    46  	AIS_FLAGS_LARGE_STERN_DIMENSION:     "AIS_FLAGS_LARGE_STERN_DIMENSION",
    47  	AIS_FLAGS_LARGE_PORT_DIMENSION:      "AIS_FLAGS_LARGE_PORT_DIMENSION",
    48  	AIS_FLAGS_LARGE_STARBOARD_DIMENSION: "AIS_FLAGS_LARGE_STARBOARD_DIMENSION",
    49  	AIS_FLAGS_VALID_CALLSIGN:            "AIS_FLAGS_VALID_CALLSIGN",
    50  	AIS_FLAGS_VALID_NAME:                "AIS_FLAGS_VALID_NAME",
    51  }
    52  
    53  var values_AIS_FLAGS = map[string]AIS_FLAGS{
    54  	"AIS_FLAGS_POSITION_ACCURACY":         AIS_FLAGS_POSITION_ACCURACY,
    55  	"AIS_FLAGS_VALID_COG":                 AIS_FLAGS_VALID_COG,
    56  	"AIS_FLAGS_VALID_VELOCITY":            AIS_FLAGS_VALID_VELOCITY,
    57  	"AIS_FLAGS_HIGH_VELOCITY":             AIS_FLAGS_HIGH_VELOCITY,
    58  	"AIS_FLAGS_VALID_TURN_RATE":           AIS_FLAGS_VALID_TURN_RATE,
    59  	"AIS_FLAGS_TURN_RATE_SIGN_ONLY":       AIS_FLAGS_TURN_RATE_SIGN_ONLY,
    60  	"AIS_FLAGS_VALID_DIMENSIONS":          AIS_FLAGS_VALID_DIMENSIONS,
    61  	"AIS_FLAGS_LARGE_BOW_DIMENSION":       AIS_FLAGS_LARGE_BOW_DIMENSION,
    62  	"AIS_FLAGS_LARGE_STERN_DIMENSION":     AIS_FLAGS_LARGE_STERN_DIMENSION,
    63  	"AIS_FLAGS_LARGE_PORT_DIMENSION":      AIS_FLAGS_LARGE_PORT_DIMENSION,
    64  	"AIS_FLAGS_LARGE_STARBOARD_DIMENSION": AIS_FLAGS_LARGE_STARBOARD_DIMENSION,
    65  	"AIS_FLAGS_VALID_CALLSIGN":            AIS_FLAGS_VALID_CALLSIGN,
    66  	"AIS_FLAGS_VALID_NAME":                AIS_FLAGS_VALID_NAME,
    67  }
    68  
    69  // MarshalText implements the encoding.TextMarshaler interface.
    70  func (e AIS_FLAGS) MarshalText() ([]byte, error) {
    71  	if e == 0 {
    72  		return []byte("0"), nil
    73  	}
    74  	var names []string
    75  	for i := 0; i < 13; i++ {
    76  		mask := AIS_FLAGS(1 << i)
    77  		if e&mask == mask {
    78  			names = append(names, labels_AIS_FLAGS[mask])
    79  		}
    80  	}
    81  	return []byte(strings.Join(names, " | ")), nil
    82  }
    83  
    84  // UnmarshalText implements the encoding.TextUnmarshaler interface.
    85  func (e *AIS_FLAGS) UnmarshalText(text []byte) error {
    86  	labels := strings.Split(string(text), " | ")
    87  	var mask AIS_FLAGS
    88  	for _, label := range labels {
    89  		if value, ok := values_AIS_FLAGS[label]; ok {
    90  			mask |= value
    91  		} else if value, err := strconv.Atoi(label); err == nil {
    92  			mask |= AIS_FLAGS(value)
    93  		} else {
    94  			return fmt.Errorf("invalid label '%s'", label)
    95  		}
    96  	}
    97  	*e = mask
    98  	return nil
    99  }
   100  
   101  // String implements the fmt.Stringer interface.
   102  func (e AIS_FLAGS) String() string {
   103  	val, _ := e.MarshalText()
   104  	return string(val)
   105  }