54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
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...)
|
|
}
|