Add SetStdout SetStdin
I saw that I cannot easily convert the string path in SetStdoutFile(path string) to the io.ReadWriter on wasmtime-go, so this is a suggestion to wasmtime.
io.ReadWriter is an interface which implemented by os.File and bytes.Buffer. With an io.ReadWriter as the parameter for WASI config, golang can operate its favor bytes without filesystem-level io, which means the WASI call will be more easy safe and stable.
buf := bytes.NewBuffer(nil)
config := wasmtime.NewWasiConfig()
config.SetStdin(buf)
config.SetStdout(buf)
// then instaniate the wasi with the config
go func(){
b, err buf.ReadBytes('\n')
// handle this
}()
go instance.GetExport("_start").Func().Call()
// now intance request a stdin
buf.Write("continue exec")
This is similar to https://github.com/bytecodealliance/wasmtime-py/issues/34 where there's support for this in the Rust wasmtime API but support has yet to be added to the C API
Bumping this, as it would be extremely useful to be able to pass stdin and get stdout from modules :)
@alexcrichton if you have any advice on how we could help implement this, we'd love to contribute.
Implementing this would first need to start out at the Wasmtime C API layer. There's not a ton of Wasmtime-specific prior art to choose from unfortunately, so the APIs for this at the C layer need to be designed from scratch and implemented. Once that's landed then the Go support can be built on top of that.
Bumping this as well, I think it would be pretty handy to have this functionality implemented as in the Rust implementation.