code.icb4dc0.de/buildr/wasi-module-sdk-go@v0.0.0-20230524201105-cc52d195017b/entrypoint.go (about)

     1  package sdk
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/mailru/easyjson"
     7  	_ "github.com/tetratelabs/tinymem"
     8  
     9  	"code.icb4dc0.de/buildr/wasi-module-sdk-go/mem"
    10  	rpcv1 "code.icb4dc0.de/buildr/wasi-module-sdk-go/protocol/generated/rpc/v1"
    11  )
    12  
    13  var defaultRegistry = NewTypeRegistry()
    14  
    15  func Register(cat Category, moduleName string, factory Factory) {
    16  	defaultRegistry.Add(cat, moduleName, factory)
    17  }
    18  
    19  //export inventory
    20  func Inventory() uint64 {
    21  	var inventory rpcv1.PluginInventory
    22  
    23  	for _, t := range defaultRegistry.List() {
    24  		inventory.Modules = append(inventory.Modules, &rpcv1.ModuleReference{
    25  			ModuleCategory: t.Category.String(),
    26  			ModuleType:     t.Type,
    27  		})
    28  	}
    29  
    30  	data, err := inventory.MarshalVT()
    31  	if err != nil {
    32  		panic(err)
    33  	}
    34  
    35  	return mem.UnifyPtrSize(mem.DataToUnmanagedPtr(data))
    36  }
    37  
    38  //export run
    39  func Run(specPtr, specSize uint32) {
    40  	var startTask rpcv1.StartTaskRequest
    41  
    42  	if err := startTask.UnmarshalVT(mem.DataFromPtr(specPtr, specSize)); err != nil {
    43  		panic(err)
    44  	}
    45  
    46  	executor := NewExecutor(startTask.Buildr.Repo.Root, startTask.Buildr.OutDir, startTask.Buildr.BinDir)
    47  	reference := startTask.GetReference().GetModule()
    48  	module := defaultRegistry.Get(Category(reference.GetModuleCategory()), reference.GetModuleType())
    49  
    50  	if err := easyjson.Unmarshal(startTask.RawTask, module); err != nil {
    51  		panic(err)
    52  	}
    53  
    54  	executor.Run(context.Background(), module)
    55  }