github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/pkg/project/registry.go (about)

     1  package project
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/ActiveState/cli/internal/errs"
     7  )
     8  
     9  // expanderRegistry maps category names to their Expander Func implementations.
    10  var expanderRegistry = map[string]ExpanderFunc{}
    11  
    12  var (
    13  	ErrExpandBadName = errs.New("Bad expander name")
    14  	ErrExpandNoFunc  = errs.New("Expander has no handler")
    15  )
    16  
    17  const TopLevelExpanderName = "toplevel"
    18  
    19  func init() {
    20  	expanderRegistry = map[string]ExpanderFunc{
    21  		"events":             EventExpander,
    22  		"scripts":            ScriptExpander,
    23  		"constants":          ConstantExpander,
    24  		"project":            ProjectExpander,
    25  		TopLevelExpanderName: TopLevelExpander,
    26  	}
    27  }
    28  
    29  // RegisterExpander registers an Expander Func for some given handler value. The handler value
    30  // must not effectively be a blank string and the Func must be defined. It is definitely possible
    31  // to replace an existing handler using this function.
    32  func RegisterExpander(handle string, expanderFn ExpanderFunc) error {
    33  	cleanHandle := strings.TrimSpace(handle)
    34  	if cleanHandle == "" {
    35  		return errs.Wrap(ErrExpandBadName, "secrets_expander_err_empty_name")
    36  	} else if expanderFn == nil {
    37  		return errs.Wrap(ErrExpandNoFunc, "secrets_expander_err_undefined")
    38  	}
    39  	expanderRegistry[cleanHandle] = expanderFn
    40  	return nil
    41  }
    42  
    43  // RegisteredExpander returns the expander registered for the given handle
    44  func RegisteredExpander(handle string) ExpanderFunc {
    45  	if expander, ok := expanderRegistry[handle]; ok {
    46  		return expander
    47  	}
    48  	return nil
    49  }
    50  
    51  // IsRegistered returns true if an Expander Func is registered for a given handle/name.
    52  func IsRegistered(handle string) bool {
    53  	_, ok := expanderRegistry[handle]
    54  	return ok
    55  }