Skip to content

Commit

Permalink
Enumeration Helpers (#166)
Browse files Browse the repository at this point in the history
  • Loading branch information
bbengfort authored Jul 21, 2024
1 parent 2e34356 commit 423bb2b
Show file tree
Hide file tree
Showing 12 changed files with 1,159 additions and 79 deletions.
133 changes: 130 additions & 3 deletions pkg/ivms101/enum.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ import (
"strings"
)

//
// Constant Code Helpers
//
//===========================================================================
// ENUM Constant Code Helpers
//===========================================================================

// Short form natural person name type codes.
const (
Expand All @@ -21,13 +21,15 @@ const (

// Short form legal person name type codes.
const (
LegalPersonMisc = LegalPersonNameTypeCode_LEGAL_PERSON_NAME_TYPE_CODE_MISC
LegalPersonLegal = LegalPersonNameTypeCode_LEGAL_PERSON_NAME_TYPE_CODE_LEGL
LegalPersonShort = LegalPersonNameTypeCode_LEGAL_PERSON_NAME_TYPE_CODE_SHRT
LegalPersonTrading = LegalPersonNameTypeCode_LEGAL_PERSON_NAME_TYPE_CODE_TRAD
)

// Short form address type codes.
const (
AddressTypeMisc = AddressTypeCode_ADDRESS_TYPE_CODE_MISC
AddressTypeHome = AddressTypeCode_ADDRESS_TYPE_CODE_HOME
AddressTypeBusiness = AddressTypeCode_ADDRESS_TYPE_CODE_BIZZ
AddressTypeGeographic = AddressTypeCode_ADDRESS_TYPE_CODE_GEOG
Expand All @@ -47,6 +49,27 @@ const (
NationalIdentifierMISC = NationalIdentifierTypeCode_NATIONAL_IDENTIFIER_TYPE_CODE_MISC
)

// Short form transliteration method codes.
const (
TransliterationMethodOTHR = TransliterationMethodCode_TRANSLITERATION_METHOD_CODE_OTHR
TransliterationMethodARAB = TransliterationMethodCode_TRANSLITERATION_METHOD_CODE_ARAB
TransliterationMethodARAN = TransliterationMethodCode_TRANSLITERATION_METHOD_CODE_ARAN
TransliterationMethodARMN = TransliterationMethodCode_TRANSLITERATION_METHOD_CODE_ARMN
TransliterationMethodCYRL = TransliterationMethodCode_TRANSLITERATION_METHOD_CODE_CYRL
TransliterationMethodDEVA = TransliterationMethodCode_TRANSLITERATION_METHOD_CODE_DEVA
TransliterationMethodGEOR = TransliterationMethodCode_TRANSLITERATION_METHOD_CODE_GEOR
TransliterationMethodGREK = TransliterationMethodCode_TRANSLITERATION_METHOD_CODE_GREK
TransliterationMethodHANI = TransliterationMethodCode_TRANSLITERATION_METHOD_CODE_HANI
TransliterationMethodHEBR = TransliterationMethodCode_TRANSLITERATION_METHOD_CODE_HEBR
TransliterationMethodKANA = TransliterationMethodCode_TRANSLITERATION_METHOD_CODE_KANA
TransliterationMethodKORE = TransliterationMethodCode_TRANSLITERATION_METHOD_CODE_KORE
TransliterationMethodTHAI = TransliterationMethodCode_TRANSLITERATION_METHOD_CODE_THAI
)

//===========================================================================
// ENUM JSON Marshal and Unmarshal
//===========================================================================

//
// NaturalPersonNameTypeCode JSON
//
Expand Down Expand Up @@ -181,3 +204,107 @@ func (t *TransliterationMethodCode) UnmarshalJSON(data []byte) error {
*t = TransliterationMethodCode(code)
return nil
}

//===========================================================================
// Enum Parsing
//===========================================================================

func ParseNaturalPersonNameTypeCode(in any) (NaturalPersonNameTypeCode, error) {
switch val := in.(type) {
case string:
val = strings.ToUpper(val)
if !strings.HasPrefix(val, naturalPersonTypeCodePrefix) {
val = naturalPersonTypeCodePrefix + val
}

if i, ok := NaturalPersonNameTypeCode_value[val]; ok {
return NaturalPersonNameTypeCode(i), nil
}
case int32:
if _, ok := NaturalPersonNameTypeCode_name[val]; ok {
return NaturalPersonNameTypeCode(val), nil
}
}

return 0, ErrCouldNotParseEnum
}

func ParseLegalPersonNameTypeCode(in any) (LegalPersonNameTypeCode, error) {
switch val := in.(type) {
case string:
val = strings.ToUpper(val)
if !strings.HasPrefix(val, legalPersonNameTypeCodePrefix) {
val = legalPersonNameTypeCodePrefix + val
}

if i, ok := LegalPersonNameTypeCode_value[val]; ok {
return LegalPersonNameTypeCode(i), nil
}
case int32:
if _, ok := LegalPersonNameTypeCode_name[val]; ok {
return LegalPersonNameTypeCode(val), nil
}
}

return 0, ErrCouldNotParseEnum
}

func ParseAddressTypeCode(in any) (AddressTypeCode, error) {
switch val := in.(type) {
case string:
val = strings.ToUpper(val)
if !strings.HasPrefix(val, addressTypeCodePrefix) {
val = addressTypeCodePrefix + val
}

if i, ok := AddressTypeCode_value[val]; ok {
return AddressTypeCode(i), nil
}
case int32:
if _, ok := AddressTypeCode_name[val]; ok {
return AddressTypeCode(val), nil
}
}

return 0, ErrCouldNotParseEnum
}

func ParseNationalIdentifierTypeCode(in any) (NationalIdentifierTypeCode, error) {
switch val := in.(type) {
case string:
val = strings.ToUpper(val)
if !strings.HasPrefix(val, nationalIdentifierTypeCodePrefix) {
val = nationalIdentifierTypeCodePrefix + val
}

if i, ok := NationalIdentifierTypeCode_value[val]; ok {
return NationalIdentifierTypeCode(i), nil
}
case int32:
if _, ok := NationalIdentifierTypeCode_name[val]; ok {
return NationalIdentifierTypeCode(val), nil
}
}

return 0, ErrCouldNotParseEnum
}

func ParseTransliterationMethodCode(in any) (TransliterationMethodCode, error) {
switch val := in.(type) {
case string:
val = strings.ToUpper(val)
if !strings.HasPrefix(val, transliterationMethodCodePrefix) {
val = transliterationMethodCodePrefix + val
}

if i, ok := TransliterationMethodCode_value[val]; ok {
return TransliterationMethodCode(i), nil
}
case int32:
if _, ok := TransliterationMethodCode_name[val]; ok {
return TransliterationMethodCode(val), nil
}
}

return 0, ErrCouldNotParseEnum
}
Loading

0 comments on commit 423bb2b

Please sign in to comment.