github.com/filecoin-project/bacalhau@v0.3.23-0.20230228154132-45c989550ace/pkg/model/v1beta1/wasm_task.go (about)

     1  package v1beta1
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/ipld/go-ipld-prime/datamodel"
     7  )
     8  
     9  type WasmInputs struct {
    10  	Entrypoint string
    11  	Parameters []string
    12  	Modules    []Resource
    13  	Mounts     IPLDMap[string, Resource] // Resource
    14  	Outputs    IPLDMap[string, datamodel.Node]
    15  	Env        IPLDMap[string, string]
    16  }
    17  
    18  var _ JobType = (*WasmInputs)(nil)
    19  
    20  // UnmarshalInto implements taskUnmarshal
    21  func (wasm *WasmInputs) UnmarshalInto(with string, spec *Spec) error {
    22  	spec.Engine = EngineWasm
    23  	spec.Wasm = JobSpecWasm{
    24  		EntryPoint:           wasm.Entrypoint,
    25  		Parameters:           wasm.Parameters,
    26  		EnvironmentVariables: wasm.Env.Values,
    27  		ImportModules:        []StorageSpec{},
    28  	}
    29  
    30  	entryModule, err := parseResource(with)
    31  	if err != nil {
    32  		return err
    33  	}
    34  	spec.Contexts = []StorageSpec{parseStorageSource("/job", entryModule)}
    35  
    36  	for _, resource := range wasm.Modules {
    37  		resource := resource
    38  		spec.Wasm.ImportModules = append(spec.Wasm.ImportModules, parseStorageSource("", &resource))
    39  	}
    40  
    41  	inputData, err := parseInputs(wasm.Mounts)
    42  	if err != nil {
    43  		return err
    44  	}
    45  	spec.Inputs = inputData
    46  
    47  	spec.Outputs = []StorageSpec{}
    48  	for path := range wasm.Outputs.Values {
    49  		spec.Outputs = append(spec.Outputs, StorageSpec{
    50  			Path: path,
    51  			Name: strings.Trim(path, "/"),
    52  		})
    53  	}
    54  
    55  	return nil
    56  }