package sdk import ( "reflect" bapi "code.icb4dc0.de/buildr/api" "code.icb4dc0.de/buildr/wasi-module-sdk-go/mem" ) type FuncExportWrapper[TRequest bapi.ProtoMessage, TResponse bapi.ProtoMessage] func(req TRequest) (TResponse, error) func (w FuncExportWrapper[TRequest, TResponse]) Call(reqPtr, reqSize uint32) uint64 { var req TRequest if reflect.TypeOf(req).Kind() == reflect.Ptr { req = reflect.New(reflect.TypeOf(req).Elem()).Interface().(TRequest) } if err := req.UnmarshalVT(mem.DataFromPtr(reqPtr, reqSize)); err != nil { panic(err) } if resp, err := w(req); err != nil { panic(err) } else if data, err := resp.MarshalVT(); err != nil { panic(err) } else if len(data) == 0 { return 0 } else { return mem.UnifyPtrSize(mem.DataToUnmanagedPtr(data)) } }