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  }