github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/syft/pkg/conan_lock_metadata.go (about) 1 package pkg 2 3 import ( 4 "strings" 5 6 "github.com/anchore/packageurl-go" 7 "github.com/anchore/syft/syft/linux" 8 ) 9 10 type ConanLockMetadata struct { 11 Ref string `json:"ref"` 12 PackageID string `json:"package_id,omitempty"` 13 Prev string `json:"prev,omitempty"` 14 Requires []string `json:"requires,omitempty"` 15 BuildRequires []string `json:"build_requires,omitempty"` 16 PythonRequires []string `json:"py_requires,omitempty"` 17 Options map[string]string `json:"options,omitempty"` 18 Path string `json:"path,omitempty"` 19 Context string `json:"context,omitempty"` 20 } 21 22 func (m ConanLockMetadata) PackageURL(_ *linux.Release) string { 23 var qualifiers packageurl.Qualifiers 24 25 name, version := m.NameAndVersion() 26 27 return packageurl.NewPackageURL( 28 packageurl.TypeConan, 29 "", 30 name, 31 version, 32 qualifiers, 33 "", 34 ).ToString() 35 } 36 37 // NameAndVersion returns the name and version of the package. 38 // If ref is not in the format of "name/version@user/channel", then an empty string is returned for both. 39 func (m ConanLockMetadata) NameAndVersion() (name, version string) { 40 if len(m.Ref) < 1 { 41 return name, version 42 } 43 44 splits := strings.Split(strings.Split(m.Ref, "@")[0], "/") 45 if len(splits) < 2 { 46 return name, version 47 } 48 49 return splits[0], splits[1] 50 }