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 }