github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/rego/convert/anonymous.go (about) 1 package convert 2 3 import ( 4 "reflect" 5 ) 6 7 var converterInterface = reflect.TypeOf((*Converter)(nil)).Elem() 8 9 func anonymousToRego(inputValue reflect.Value) interface{} { 10 11 if inputValue.IsZero() { 12 return nil 13 } 14 15 for inputValue.Type().Kind() == reflect.Interface { 16 if inputValue.IsNil() { 17 return nil 18 } 19 inputValue = inputValue.Elem() 20 } 21 22 if inputValue.Type().Implements(converterInterface) { 23 returns := inputValue.MethodByName("ToRego").Call(nil) 24 return returns[0].Interface() 25 } 26 27 for inputValue.Type().Kind() == reflect.Ptr { 28 if inputValue.IsNil() { 29 return nil 30 } 31 inputValue = inputValue.Elem() 32 } 33 34 if inputValue.Type().Implements(converterInterface) { 35 returns := inputValue.MethodByName("ToRego").Call(nil) 36 return returns[0].Interface() 37 } 38 39 switch kind := inputValue.Type().Kind(); kind { 40 case reflect.Struct: 41 return StructToRego(inputValue) 42 case reflect.Slice: 43 return SliceToRego(inputValue) 44 } 45 46 return nil 47 }