gitlab.com/evatix-go/core@v1.3.55/coreimpl/enumimpl/BasicUInt16.go (about)

     1  package enumimpl
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"gitlab.com/evatix-go/core/constants"
     7  	"gitlab.com/evatix-go/core/coreimpl/enumimpl/enumtype"
     8  	"gitlab.com/evatix-go/core/coreinterface"
     9  	"gitlab.com/evatix-go/core/defaulterr"
    10  	"gitlab.com/evatix-go/core/errcore"
    11  )
    12  
    13  type BasicUInt16 struct {
    14  	numberEnumBase
    15  	jsonDoubleQuoteNameToValueHashMap        map[string]uint16 // contains names double quotes to value
    16  	valueToJsonDoubleQuoteStringBytesHashmap map[uint16][]byte // contains value to string bytes with double quotes
    17  	valueNameHashmap                         map[uint16]string // contains name without double quotes
    18  	minVal, maxVal                           uint16
    19  }
    20  
    21  func (it BasicUInt16) IsAnyNamesOf(
    22  	value uint16,
    23  	names ...string,
    24  ) bool {
    25  	currentName := it.ToEnumString(value)
    26  
    27  	for _, name := range names {
    28  		if name == currentName {
    29  			return true
    30  		}
    31  	}
    32  
    33  	return false
    34  }
    35  
    36  func (it BasicUInt16) IsAnyOf(value uint16, checkingItems ...uint16) bool {
    37  	if len(checkingItems) == 0 {
    38  		return true
    39  	}
    40  
    41  	for _, givenByte := range checkingItems {
    42  		if value == givenByte {
    43  			return true
    44  		}
    45  	}
    46  
    47  	return false
    48  }
    49  
    50  func (it BasicUInt16) Max() uint16 {
    51  	return it.maxVal
    52  }
    53  
    54  func (it BasicUInt16) Min() uint16 {
    55  	return it.minVal
    56  }
    57  
    58  func (it BasicUInt16) GetValueByString(valueString string) uint16 {
    59  	return it.jsonDoubleQuoteNameToValueHashMap[valueString]
    60  }
    61  
    62  func (it BasicUInt16) GetValueByName(
    63  	name string,
    64  ) (uint16, error) {
    65  	v, has := it.jsonDoubleQuoteNameToValueHashMap[name]
    66  
    67  	if has {
    68  		return v, nil
    69  	}
    70  
    71  	wrapped := fmt.Sprintf(
    72  		constants.SprintDoubleQuoteFormat,
    73  		name)
    74  
    75  	nextVal, isFoundByWrapped := it.jsonDoubleQuoteNameToValueHashMap[wrapped]
    76  
    77  	if isFoundByWrapped {
    78  		return nextVal, nil
    79  	}
    80  
    81  	// has error
    82  	return constants.Zero, enumUnmarshallingMappingFailedError(
    83  		it.TypeName(),
    84  		name,
    85  		it.RangeNamesCsv())
    86  }
    87  
    88  func (it BasicUInt16) GetStringValue(input uint16) string {
    89  	return it.StringRanges()[input]
    90  }
    91  
    92  func (it BasicUInt16) ExpectingEnumValueError(
    93  	rawString string,
    94  	expectedEnum interface{},
    95  ) error {
    96  	expectedEnumName := it.ToName(expectedEnum)
    97  	expectedValue := it.GetValueByString(expectedEnumName)
    98  	convValue, err := it.GetValueByName(rawString)
    99  
   100  	if err != nil {
   101  		return errcore.ExpectingErrorSimpleNoType(
   102  			"Expecting enum: "+expectedEnumName,
   103  			expectedEnumName,
   104  			rawString+err.Error())
   105  	}
   106  
   107  	if convValue == expectedValue {
   108  		return nil
   109  	}
   110  
   111  	return errcore.ExpectingErrorSimpleNoType(
   112  		"Expecting enum: "+expectedEnumName,
   113  		expectedEnumName,
   114  		rawString+it.RangesInvalidMessage())
   115  }
   116  
   117  func (it BasicUInt16) Ranges() []uint16 {
   118  	return it.actualValueRanges.([]uint16)
   119  }
   120  
   121  func (it BasicUInt16) Hashmap() map[string]uint16 {
   122  	return it.jsonDoubleQuoteNameToValueHashMap
   123  }
   124  
   125  func (it BasicUInt16) HashmapPtr() *map[string]uint16 {
   126  	return &it.jsonDoubleQuoteNameToValueHashMap
   127  }
   128  
   129  func (it BasicUInt16) IsValidRange(value uint16) bool {
   130  	return value >= it.minVal && value <= it.maxVal
   131  }
   132  
   133  // ToEnumJsonBytes used for MarshalJSON from map
   134  func (it BasicUInt16) ToEnumJsonBytes(value uint16) ([]byte, error) {
   135  	jsonBytes, has := it.valueToJsonDoubleQuoteStringBytesHashmap[value]
   136  
   137  	if has {
   138  		return jsonBytes, nil
   139  	}
   140  
   141  	return []byte{}, it.notFoundJsonBytesError(value)
   142  }
   143  
   144  func (it BasicUInt16) ToEnumString(value uint16) string {
   145  	return it.valueNameHashmap[value]
   146  }
   147  
   148  func (it BasicUInt16) AppendPrependJoinValue(
   149  	joiner string,
   150  	appendVal, prependVal uint16,
   151  ) string {
   152  	return it.ToEnumString(prependVal) +
   153  		joiner +
   154  		it.ToEnumString(appendVal)
   155  }
   156  
   157  func (it BasicUInt16) AppendPrependJoinNamer(
   158  	joiner string,
   159  	appendVal, prependVal coreinterface.ToNamer,
   160  ) string {
   161  	return prependVal.Name() +
   162  		joiner +
   163  		appendVal.Name()
   164  }
   165  
   166  func (it BasicUInt16) ToNumberString(valueInRawFormat interface{}) string {
   167  	return fmt.Sprintf(constants.SprintValueFormat, valueInRawFormat)
   168  }
   169  
   170  // UnmarshallToValue Mostly used for UnmarshalJSON
   171  //
   172  // Given bytes string enum value and transpile to exact enum raw value using map
   173  func (it BasicUInt16) UnmarshallToValue(
   174  	isMappedToFirstIfEmpty bool,
   175  	jsonUnmarshallingValue []byte,
   176  ) (uint16, error) {
   177  	if !isMappedToFirstIfEmpty && jsonUnmarshallingValue == nil {
   178  		return constants.Zero,
   179  			defaulterr.UnmarshallingFailedDueToNilOrEmpty
   180  	}
   181  
   182  	if isMappedToFirstIfEmpty && jsonUnmarshallingValue == nil {
   183  		return it.minVal, nil
   184  	}
   185  
   186  	str := string(jsonUnmarshallingValue)
   187  	if isMappedToFirstIfEmpty &&
   188  		(str == constants.EmptyString || str == constants.DoubleQuotationStartEnd) {
   189  		return it.minVal, nil
   190  	}
   191  
   192  	return it.GetValueByName(str)
   193  }
   194  
   195  func (it BasicUInt16) EnumType() enumtype.Variant {
   196  	return enumtype.UnsignedInteger16
   197  }