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  }