github.com/filecoin-project/bacalhau@v0.3.23-0.20230228154132-45c989550ace/pkg/model/v1beta1/engine.go (about) 1 package v1beta1 2 3 import ( 4 "fmt" 5 "strings" 6 ) 7 8 //go:generate stringer -type=Engine --trimprefix=Engine 9 type Engine int 10 11 const ( 12 engineUnknown Engine = iota // must be first 13 EngineNoop 14 EngineDocker 15 EngineWasm 16 EngineLanguage // wraps python_wasm 17 EnginePythonWasm // wraps docker 18 engineDone // must be last 19 ) 20 21 func IsValidEngine(e Engine) bool { 22 return e > engineUnknown && e < engineDone 23 } 24 25 func ParseEngine(str string) (Engine, error) { 26 for typ := engineUnknown + 1; typ < engineDone; typ++ { 27 if strings.EqualFold(typ.String(), str) { 28 return typ, nil 29 } 30 } 31 32 return engineUnknown, fmt.Errorf( 33 "executor: unknown engine type '%s'", str) 34 } 35 36 func EngineTypes() []Engine { 37 var res []Engine 38 for typ := engineUnknown + 1; typ < engineDone; typ++ { 39 res = append(res, typ) 40 } 41 42 return res 43 } 44 45 func EngineNames() []string { 46 var names []string 47 for _, typ := range EngineTypes() { 48 names = append(names, typ.String()) 49 } 50 return names 51 } 52 53 func (e Engine) MarshalText() ([]byte, error) { 54 return []byte(e.String()), nil 55 } 56 57 func (e *Engine) UnmarshalText(text []byte) (err error) { 58 name := string(text) 59 *e, err = ParseEngine(name) 60 return 61 }