package sdk import ( rpcv1 "code.icb4dc0.de/buildr/wasi-module-sdk-go/protocol/generated/rpc/v1" "context" "fmt" "golang.org/x/exp/slog" "io" "time" ) type Category = rpcv1.Category const ( CategoryTool Category = rpcv1.Category_CategoryTool CategoryTask Category = rpcv1.Category_CategoryTask CategoryBuild Category = rpcv1.Category_CategoryBuild CategoryPackage Category = rpcv1.Category_CategoryPackage ) type StateMetadata struct { ModifiedAt time.Time TTL *time.Time } type ExecutionContext interface { context.Context WorkingDir() string OutDir() string BinariesDir() string StdOut() io.Writer StdErr() io.Writer Logger() *slog.Logger GetState(ctx context.Context, key string) ([]byte, StateMetadata, error) SetState(ctx context.Context, key string, value []byte) error } type Module interface { Execute(ctx ExecutionContext) error Category() Category Type() string } type Helper interface { Help() Help } type BinaryNamer interface { BinaryName() string } type ToolModule interface { Module BinaryNamer } type Factory interface { Create() Module } var _ Factory = (*ModuleFactoryFunc)(nil) type ModuleFactoryFunc func() Module func (f ModuleFactoryFunc) Create() Module { return f() }