github.com/osievert/jfrog-cli-core@v1.2.7/artifactory/utils/dotnet/solution/project/project.go (about)

     1  package project
     2  
     3  import (
     4  	"encoding/json"
     5  	"github.com/jfrog/jfrog-cli-core/artifactory/utils/dependenciestree"
     6  	"github.com/jfrog/jfrog-cli-core/artifactory/utils/dotnet/dependencies"
     7  )
     8  
     9  type Project interface {
    10  	Name() string
    11  	MarshalJSON() ([]byte, error)
    12  	Extractor() dependencies.Extractor
    13  	CreateDependencyTree() error
    14  }
    15  
    16  func Load(name, rootPath, dependenciesSource string) (Project, error) {
    17  	var err error
    18  	project := &project{name: name, rootPath: rootPath, dependenciesSource: dependenciesSource}
    19  	project.extractor, err = project.getCompatibleExtractor()
    20  	return project, err
    21  }
    22  
    23  func (project *project) getCompatibleExtractor() (dependencies.Extractor, error) {
    24  	extractor, err := dependencies.CreateCompatibleExtractor(project.name, project.dependenciesSource)
    25  	return extractor, err
    26  }
    27  
    28  func (project *project) CreateDependencyTree() error {
    29  	var err error
    30  	project.dependencyTree, err = dependencies.CreateDependencyTree(project.extractor)
    31  	return err
    32  }
    33  
    34  type project struct {
    35  	name               string
    36  	rootPath           string
    37  	dependenciesSource string
    38  	dependencyTree     dependenciestree.Tree
    39  	extractor          dependencies.Extractor
    40  }
    41  
    42  func (project *project) Name() string {
    43  	return project.name
    44  }
    45  
    46  func (project *project) Extractor() dependencies.Extractor {
    47  	return project.extractor
    48  }
    49  
    50  func (project *project) MarshalJSON() ([]byte, error) {
    51  	return json.Marshal(&struct {
    52  		Name         string                `json:"name,omitempty"`
    53  		Dependencies dependenciestree.Tree `json:"dependencies,omitempty"`
    54  	}{
    55  		Name:         project.name,
    56  		Dependencies: project.dependencyTree,
    57  	})
    58  }