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

     1  package sdk
     2  
     3  import (
     4  	"context"
     5  	"io"
     6  	"os"
     7  
     8  	"golang.org/x/exp/slog"
     9  )
    10  
    11  var _ ExecutionContext = (*wasiExecutionContext)(nil)
    12  
    13  func newWasiExecutionContext(
    14  	ctx context.Context,
    15  	logger *slog.Logger,
    16  	mod Module,
    17  	repoRoot, binDir, outDir string,
    18  ) *wasiExecutionContext {
    19  	return &wasiExecutionContext{
    20  		Context:  ctx,
    21  		logger:   logger,
    22  		mod:      mod,
    23  		repoRoot: repoRoot,
    24  		outDir:   outDir,
    25  		binDir:   binDir,
    26  	}
    27  }
    28  
    29  type wasiExecutionContext struct {
    30  	context.Context
    31  	stateProxy StateProxy
    32  	logger     *slog.Logger
    33  	mod        Module
    34  	repoRoot   string
    35  	outDir     string
    36  	binDir     string
    37  }
    38  
    39  func (w wasiExecutionContext) WorkingDir() string {
    40  	return w.repoRoot
    41  }
    42  
    43  func (w wasiExecutionContext) OutDir() string {
    44  	return w.outDir
    45  }
    46  
    47  func (w wasiExecutionContext) BinariesDir() string {
    48  	return w.binDir
    49  }
    50  
    51  func (w wasiExecutionContext) StdOut() io.Writer {
    52  	return os.Stdout
    53  }
    54  
    55  func (w wasiExecutionContext) StdErr() io.Writer {
    56  	return os.Stderr
    57  }
    58  
    59  func (w wasiExecutionContext) Logger() *slog.Logger {
    60  	return w.logger
    61  }
    62  
    63  func (w wasiExecutionContext) GetState(_ context.Context, key string) ([]byte, StateMetadata, error) {
    64  	return w.stateProxy.Get([]byte(key))
    65  }
    66  
    67  func (w wasiExecutionContext) SetState(_ context.Context, key string, value []byte) error {
    68  	return w.stateProxy.Set([]byte(key), value)
    69  }