github.com/anchore/syft@v1.38.2/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  	reflect.TypeOf(source.SnapMetadata{}):      {"snap"},
    15  }
    16  
    17  func AllTypeNames() []string {
    18  	names := make([]string, 0)
    19  	for _, t := range AllTypes() {
    20  		names = append(names, reflect.TypeOf(t).Name())
    21  	}
    22  	return names
    23  }
    24  
    25  func JSONName(metadata any) string {
    26  	if vs, exists := jsonNameFromType[reflect.TypeOf(metadata)]; exists {
    27  		return vs[0]
    28  	}
    29  	return ""
    30  }
    31  
    32  func ReflectTypeFromJSONName(name string) reflect.Type {
    33  	name = strings.ToLower(name)
    34  	for t, vs := range jsonNameFromType {
    35  		for _, v := range vs {
    36  			if strings.ToLower(v) == name {
    37  				return t
    38  			}
    39  		}
    40  	}
    41  	return nil
    42  }