github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/runners/export/config/config.go (about)

     1  package config
     2  
     3  import (
     4  	"github.com/ActiveState/cli/internal/captain"
     5  	"github.com/ActiveState/cli/internal/output"
     6  	"github.com/ActiveState/cli/internal/primer"
     7  )
     8  
     9  type configurable interface {
    10  	ConfigPath() string
    11  }
    12  
    13  type Config struct {
    14  	out output.Outputer
    15  	cfg configurable
    16  }
    17  
    18  type ConfigParams struct {
    19  	Filter Filter
    20  }
    21  
    22  type primeable interface {
    23  	primer.Outputer
    24  	primer.Configurer
    25  }
    26  
    27  func New(prime primeable) *Config {
    28  	return &Config{prime.Output(), prime.Config()}
    29  }
    30  
    31  type valueOutput struct {
    32  	Value string `json:"value"`
    33  }
    34  
    35  func (c *Config) Run(cmd *captain.Command, params *ConfigParams) error {
    36  	configOutput := map[string]string{
    37  		Dir.String(): c.cfg.ConfigPath(),
    38  	}
    39  
    40  	filteredOutput := configOutput
    41  	if params.Filter.terms != nil {
    42  		filteredOutput = map[string]string{}
    43  		for _, term := range params.Filter.terms {
    44  			if value, ok := configOutput[term.String()]; ok {
    45  				filteredOutput[term.String()] = value
    46  				if len(params.Filter.terms) == 1 {
    47  					c.out.Print(output.Prepare(value, &valueOutput{value}))
    48  					return nil
    49  				}
    50  			}
    51  		}
    52  	}
    53  
    54  	c.out.Print(output.Prepare(filteredOutput, filteredOutput))
    55  	return nil
    56  }