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 }