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  }