package registry type NodeRiskLevel string const ( NodeRiskLevelLow NodeRiskLevel = "low" NodeRiskLevelMedium NodeRiskLevel = "medium" NodeRiskLevelHigh NodeRiskLevel = "high" ) type NodeSpec struct { Type string `json:"type"` Title string `json:"title"` Description string `json:"description"` RiskLevel NodeRiskLevel `json:"riskLevel"` Interruptible bool `json:"interruptible"` RequiresConfirmationPredecessor bool `json:"requiresConfirmationPredecessor"` } type Registry struct { specsByType map[string]NodeSpec specs []NodeSpec } func NewRegistry(specs ...NodeSpec) *Registry { ret := &Registry{ specsByType: make(map[string]NodeSpec, len(specs)), specs: make([]NodeSpec, 0, len(specs)), } for _, spec := range specs { if spec.Type == "" { continue } ret.specsByType[spec.Type] = spec ret.specs = append(ret.specs, spec) } return ret } func (r *Registry) Get(nodeType string) (NodeSpec, bool) { if r == nil { return NodeSpec{}, false } spec, ok := r.specsByType[nodeType] return spec, ok } func (r *Registry) List() []NodeSpec { if r == nil { return nil } return append([]NodeSpec(nil), r.specs...) }