github.com/anchore/syft@v1.4.2-0.20240516191711-1bec1fc5d397/syft/internal/sourcemetadata/names.go (about) 1 package sourcemetadata 2 3 import ( 4 "reflect" 5 "strings" 6 7 "github.com/anchore/syft/syft/source" 8 ) 9 10 var jsonNameFromType = map[reflect.Type][]string{ 11 reflect.TypeOf(source.DirectoryMetadata{}): {"directory", "dir"}, 12 reflect.TypeOf(source.FileMetadata{}): {"file"}, 13 reflect.TypeOf(source.ImageMetadata{}): {"image"}, 14 } 15 16 func AllTypeNames() []string { 17 names := make([]string, 0) 18 for _, t := range AllTypes() { 19 names = append(names, reflect.TypeOf(t).Name()) 20 } 21 return names 22 } 23 24 func JSONName(metadata any) string { 25 if vs, exists := jsonNameFromType[reflect.TypeOf(metadata)]; exists { 26 return vs[0] 27 } 28 return "" 29 } 30 31 func ReflectTypeFromJSONName(name string) reflect.Type { 32 name = strings.ToLower(name) 33 for t, vs := range jsonNameFromType { 34 for _, v := range vs { 35 if strings.ToLower(v) == name { 36 return t 37 } 38 } 39 } 40 return nil 41 }