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 }