wasi-module-sdk-go/api.go

67 lines
1.2 KiB
Go

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()
}