MCPcopy
hub / github.com/cortexlabs/cortex / StructFromStringMap

Function StructFromStringMap

pkg/lib/configreader/reader.go:791–989  ·  view source on GitHub ↗

Reads a string map into a struct

(dest interface{}, strMap map[string]string, v *StructValidation)

Source from the content-addressed store, hash-verified

789
790// Reads a string map into a struct
791func StructFromStringMap(dest interface{}, strMap map[string]string, v *StructValidation) []error {
792 allowedFields := []string{}
793 allErrs := []error{}
794 var ok bool
795
796 if strMap == nil {
797 if v.TreatNullAsEmpty {
798 strMap = make(map[string]string, 0)
799 } else {
800 if !v.AllowExplicitNull {
801 return []error{ErrorCannotBeEmptyOrNull(v.Required)}
802 }
803 return nil
804 }
805 }
806
807 for _, structFieldValidation := range v.StructFieldValidations {
808 key := inferKey(reflect.TypeOf(dest), structFieldValidation.StructField, structFieldValidation.Key)
809 allowedFields = append(allowedFields, key)
810
811 if structFieldValidation.Nil == true {
812 continue
813 }
814
815 strMapVal, keyExists := strMap[key]
816
817 var err error
818 var errs []error
819 var val interface{}
820
821 if structFieldValidation.StringValidation != nil {
822 validation := *structFieldValidation.StringValidation
823 updateValidation(&validation, dest, structFieldValidation)
824 if keyExists {
825 val, err = StringFromStr(strMapVal, &validation)
826 } else {
827 val, err = ValidateStringMissing(&validation)
828 }
829 if err == nil && structFieldValidation.Parser != nil {
830 val, err = structFieldValidation.Parser(val.(string))
831 }
832 } else if structFieldValidation.StringPtrValidation != nil {
833 validation := *structFieldValidation.StringPtrValidation
834 updateValidation(&validation, dest, structFieldValidation)
835 if keyExists {
836 val, err = StringPtrFromStr(strMapVal, &validation)
837 } else {
838 val, err = ValidateStringPtrMissing(&validation)
839 }
840 if err == nil && structFieldValidation.Parser != nil {
841 if val.(*string) == nil {
842 val = nil
843 } else {
844 val, err = structFieldValidation.Parser(*val.(*string))
845 if err == nil && val != nil {
846 valValue := reflect.ValueOf(val)
847 valPtrValue := reflect.New(valValue.Type())
848 valPtrValue.Elem().Set(valValue)

Callers 1

StructFromFilesFunction · 0.85

Calls 15

PanicFunction · 0.92
WrapFunction · 0.92
WrapAllFunction · 0.92
AddErrorFunction · 0.92
AddErrorsFunction · 0.92
HasErrorFunction · 0.92
SubtractStrSliceFunction · 0.92
StrMapKeysStringFunction · 0.92
ErrorCannotBeEmptyOrNullFunction · 0.85
inferKeyFunction · 0.85
updateValidationFunction · 0.85
StringFromStrFunction · 0.85

Tested by

no test coverage detected