wadge

package module
v0.0.0-...-bc518a9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 14, 2024 License: Apache-2.0 Imports: 10 Imported by: 0

README

wadge: a WebAssembly bridge

wadge is a WebAssembly "bridge" enabling native applications to invoke Wasm functions that are ordinarily provided by a Wasm runtime. Use cases for this project include:

  • Testing WebAssembly applications natively, using existing development tools (e.g. debuggers)
  • Extending native applications with WebAssembly plugins

Currently, wadge supports Go applications written for compilation to WebAssembly components.

Bridging Wasm functions and native code

In the testing case, when you write a component using WebAssembly Interface Type (WIT) interfaces, standard Go tools like go test don’t know how to natively stub the interfaces.

In order to maintain a typical, idiomatic Go development experience, you need a “bridge” between your Go toolchain and a WebAssembly runtime that makes interfaces “just work” when it's time to test your code.

wadge (for “Wasm-bridge”) is a framework that bridges the gap, so you can work on your code in a Go-native way. This pattern can be extended beyond testing to extend native Go applications with WebAssembly functions.

How it works

wadge handles interfaces belonging to the WebAssembly System Interface (WASI) 0.2 automatically, but also allows for testing of custom interfaces defined in WIT.

  • wadge uses cabish to read and write values over FFI, passing to an embedded WebAssembly runtime (Wasmtime).
  • The wadge-bindgen-go utility walks the complete AST of your application and generates a binding file (bindings.wadge.go) by default.
  • The bindings file utilizes //go:linkname directives to replace unimplemented functions with //go:wasmimport directives—normally provided by the runtime—using a native implementation. In turn, the native implementation invokes those imports on a WebAssembly component running in an embedded wadge instance, operating in a "harness" pattern.
Testing with a WASI interface

Add wadge to your project:

go get go.joonas.cloud/wadge

Include the wadge bindgen in your tools.go like below:

//go:build tools

package main

import (
	_ "go.bytecodealliance.org/cmd/wit-bindgen-go"
	_ "go.joonas.cloud/wadge/cmd/wadge-bindgen-go"
)

Write a test for the application in a new file called <filename>_test.go (see example)

go mod tidy && go mod download

Generate wadge bindings for your test:

go run go.joonas.cloud/wadge/cmd/wadge-bindgen-go

This generates bindings.wadge.go.

Run go test:

go test
PASS
ok  	example/http/test	0.296s
Writing a test

Writing tests with wadge generally works as you would expect writing ordinary tests in Go:

  • Use the standard testing package
  • Write tests in <name>_test.go files
  • Target functions with tests using the TestTargetFunction naming convention

For more on testing in Go, see the testing package documentation.

See the examples/go/http directory for examples of a simple HTTP server and associated test using wasi:http.

There are a couple of wadge-specific details to note:

RunTest is written as a method of wadge:

func TestIncomingHandler(t *testing.T) {
	wadge.RunTest(t, func() {
		req, err := http.NewRequest("", "test", nil)
		if err != nil {
			t.Fatalf("failed to create new HTTP request: %s", err)
		}

wadgehttp is used to call the component's export over the HandleIncomingRequest interface of wasi:http:

resp, err := wadgehttp.HandleIncomingRequest(incominghandler.Exports.Handle, req)

In the examples/go/http test, the line above represents the only manual WASI-specific step: we pass in the component's export and a standard library HTTP request, and we receive a standard library HTTP response.

From this point on, we can test as usual—for example, making standard assert statements:

assert.Equal(t, 200, resp.StatusCode)
assert.Equal(t, http.Header{
	"foo": {
		"bar",
		"baz",
	},
	"key": {
		"value",
	},
}, resp.Header)
Testing a component with custom interfaces

In order to write a test for a component that uses a custom interface defined in WIT, you can call wadge in an init function of your test file to use a custom instance of the platform harness: a component that exports all of the functionality imported by your application.

Typically the platform harness is instantiated automatically and exports standard WASI functionality. When using custom interfaces, you can create a new instance:

instance, err := wadge.NewInstance(&wadge.Config{
		Wasm: component,
	})
	if err != nil {
		log.Fatalf("failed to construct new instance: %s", err)
	}
	wadge.SetInstance(instance)

You can see this in practice in the wadge/tests/go/wasi directory. The component in this directory uses custom fib and leftpad interfaces (defined in the /wit/ subfolder) and can be tested using go test.

The init function in the test file for this application is as follows:

func init() {
	log.SetFlags(0)
	slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{
		Level: slog.LevelDebug, ReplaceAttr: func(groups []string, a slog.Attr) slog.Attr {
			if a.Key == slog.TimeKey {
				return slog.Attr{}
			}
			return a
		},
	})))

	instance, err := wadge.NewInstance(&wadge.Config{
		Wasm: component,
	})
	if err != nil {
		log.Fatalf("failed to construct new instance: %s", err)
	}
	wadge.SetInstance(instance)
}

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Passthrough []byte

Passthrough is a default passthrough Wasm component, which reexports all standard WASI interfaces

Functions

func CurrentErrorHandler

func CurrentErrorHandler() func(error)

CurrentErrorHandler atomically loads the current global error handler. CurrentErrorHandler is safe for concurrent use.

func RunTest

func RunTest(t *testing.T, f func())

RunTest executes `f` with current global `wadge` Instance and global error handler, which calls `t.Fatal` on errors. RunTest is safe for concurrent use, but calling it from within `f` will cause a deadlock.

func SetErrorHandler

func SetErrorHandler(f func(error)) func(error)

SetErrorHandler atomically sets a global error handler and returns previous value. SetErrorHandler is safe for concurrent use.

func WithCurrentErrorHandler

func WithCurrentErrorHandler(f func(func(error)))

WithCurrentErrorHandler executes `f` with current global error handler. WithCurrentErrorHandler is safe for concurrent use, but calling it from within `f` will cause a deadlock.

func WithCurrentInstance

func WithCurrentInstance[T any](f func(*Instance) T) T

WithCurrentInstance executes `f` with current global `wadge` Instance. WithCurrentInstance is safe for concurrent use, but calling it from within `f` will cause a deadlock. If no global `wadge` Instance has been configured, WithCurrentInstance will attempt to use `Passthrough`. It will call `log.Fatal` if instantiating it fails.

func WithErrorHandler

func WithErrorHandler(handler func(error), f func())

WithErrorHandler executes `f` with `handler` as the global error handler resetting it back to previous value once `f` returns WithErrorHandler is safe for concurrent use, but calling it from within `handler` or `f` will cause a deadlock

func WithInstance

func WithInstance(i *Instance, f func())

WithInstance executes `f` with `i` as the global `wadge` Instance resetting it back to previous value once `f` returns WithInstance is safe for concurrent use, but calling it from within `f` will cause a deadlock

Types

type Config

type Config struct {
	// Wasm is the component bytes to instantiate, this can either be
	// binary Wasm or WAT.
	// In case a Wasm module is specified here, the runtime will componentize it.
	Wasm []byte
}

Config is `wadge` runtime configuration

type Instance

type Instance struct {
	// contains filtered or unexported fields
}

Instance is an instantiated Wasm component in `wadge` runtime

func NewInstance

func NewInstance(conf *Config) (*Instance, error)

NewInstance instantiates a new Wasm component in `wadge` runtime given a `Config`.

func SetInstance

func SetInstance(i *Instance) *Instance

SetInstance atomically sets a global `wadge` Instance. SetInstance is safe for concurrent use.

func (Instance) Call

func (i Instance) Call(instance string, name string, args ...unsafe.Pointer) error

Call calls function `name` within `instance` with arguments passed according to `cabish` specification

Directories

Path Synopsis
wadge/wadge/imports
Package imports represents the world "wadge:wadge/imports@0.1.0".
Package imports represents the world "wadge:wadge/imports@0.1.0".
wasi/cli/environment
Package environment represents the imported interface "wasi:cli/environment@0.2.1".
Package environment represents the imported interface "wasi:cli/environment@0.2.1".
wasi/cli/exit
Package exit represents the imported interface "wasi:cli/exit@0.2.1".
Package exit represents the imported interface "wasi:cli/exit@0.2.1".
wasi/cli/imports
Package imports represents the world "wasi:cli/imports@0.2.1".
Package imports represents the world "wasi:cli/imports@0.2.1".
wasi/cli/stderr
Package stderr represents the imported interface "wasi:cli/stderr@0.2.1".
Package stderr represents the imported interface "wasi:cli/stderr@0.2.1".
wasi/cli/stdin
Package stdin represents the imported interface "wasi:cli/stdin@0.2.1".
Package stdin represents the imported interface "wasi:cli/stdin@0.2.1".
wasi/cli/stdout
Package stdout represents the imported interface "wasi:cli/stdout@0.2.1".
Package stdout represents the imported interface "wasi:cli/stdout@0.2.1".
wasi/cli/terminal-input
Package terminalinput represents the imported interface "wasi:cli/terminal-input@0.2.1".
Package terminalinput represents the imported interface "wasi:cli/terminal-input@0.2.1".
wasi/cli/terminal-output
Package terminaloutput represents the imported interface "wasi:cli/terminal-output@0.2.1".
Package terminaloutput represents the imported interface "wasi:cli/terminal-output@0.2.1".
wasi/cli/terminal-stderr
Package terminalstderr represents the imported interface "wasi:cli/terminal-stderr@0.2.1".
Package terminalstderr represents the imported interface "wasi:cli/terminal-stderr@0.2.1".
wasi/cli/terminal-stdin
Package terminalstdin represents the imported interface "wasi:cli/terminal-stdin@0.2.1".
Package terminalstdin represents the imported interface "wasi:cli/terminal-stdin@0.2.1".
wasi/cli/terminal-stdout
Package terminalstdout represents the imported interface "wasi:cli/terminal-stdout@0.2.1".
Package terminalstdout represents the imported interface "wasi:cli/terminal-stdout@0.2.1".
wasi/clocks/imports
Package imports represents the world "wasi:clocks/imports@0.2.1".
Package imports represents the world "wasi:clocks/imports@0.2.1".
wasi/clocks/monotonic-clock
Package monotonicclock represents the imported interface "wasi:clocks/monotonic-clock@0.2.1".
Package monotonicclock represents the imported interface "wasi:clocks/monotonic-clock@0.2.1".
wasi/clocks/timezone
Package timezone represents the imported interface "wasi:clocks/timezone@0.2.1".
Package timezone represents the imported interface "wasi:clocks/timezone@0.2.1".
wasi/clocks/wall-clock
Package wallclock represents the imported interface "wasi:clocks/wall-clock@0.2.1".
Package wallclock represents the imported interface "wasi:clocks/wall-clock@0.2.1".
wasi/filesystem/imports
Package imports represents the world "wasi:filesystem/imports@0.2.1".
Package imports represents the world "wasi:filesystem/imports@0.2.1".
wasi/filesystem/preopens
Package preopens represents the imported interface "wasi:filesystem/preopens@0.2.1".
Package preopens represents the imported interface "wasi:filesystem/preopens@0.2.1".
wasi/filesystem/types
Package types represents the imported interface "wasi:filesystem/types@0.2.1".
Package types represents the imported interface "wasi:filesystem/types@0.2.1".
wasi/http/imports
Package imports represents the world "wasi:http/imports@0.2.1".
Package imports represents the world "wasi:http/imports@0.2.1".
wasi/http/outgoing-handler
Package outgoinghandler represents the imported interface "wasi:http/outgoing-handler@0.2.1".
Package outgoinghandler represents the imported interface "wasi:http/outgoing-handler@0.2.1".
wasi/http/types
Package types represents the imported interface "wasi:http/types@0.2.1".
Package types represents the imported interface "wasi:http/types@0.2.1".
wasi/io/error
Package ioerror represents the imported interface "wasi:io/error@0.2.1".
Package ioerror represents the imported interface "wasi:io/error@0.2.1".
wasi/io/imports
Package imports represents the world "wasi:io/imports@0.2.1".
Package imports represents the world "wasi:io/imports@0.2.1".
wasi/io/poll
Package poll represents the imported interface "wasi:io/poll@0.2.1".
Package poll represents the imported interface "wasi:io/poll@0.2.1".
wasi/io/streams
Package streams represents the imported interface "wasi:io/streams@0.2.1".
Package streams represents the imported interface "wasi:io/streams@0.2.1".
wasi/logging/imports
Package imports represents the world "wasi:logging/imports@0.1.0-draft".
Package imports represents the world "wasi:logging/imports@0.1.0-draft".
wasi/logging/logging
Package logging represents the imported interface "wasi:logging/logging@0.1.0-draft".
Package logging represents the imported interface "wasi:logging/logging@0.1.0-draft".
wasi/random/imports
Package imports represents the world "wasi:random/imports@0.2.1".
Package imports represents the world "wasi:random/imports@0.2.1".
wasi/random/insecure
Package insecure represents the imported interface "wasi:random/insecure@0.2.1".
Package insecure represents the imported interface "wasi:random/insecure@0.2.1".
wasi/random/insecure-seed
Package insecureseed represents the imported interface "wasi:random/insecure-seed@0.2.1".
Package insecureseed represents the imported interface "wasi:random/insecure-seed@0.2.1".
wasi/random/random
Package random represents the imported interface "wasi:random/random@0.2.1".
Package random represents the imported interface "wasi:random/random@0.2.1".
wasi/sockets/imports
Package imports represents the world "wasi:sockets/imports@0.2.1".
Package imports represents the world "wasi:sockets/imports@0.2.1".
wasi/sockets/instance-network
Package instancenetwork represents the imported interface "wasi:sockets/instance-network@0.2.1".
Package instancenetwork represents the imported interface "wasi:sockets/instance-network@0.2.1".
wasi/sockets/ip-name-lookup
Package ipnamelookup represents the imported interface "wasi:sockets/ip-name-lookup@0.2.1".
Package ipnamelookup represents the imported interface "wasi:sockets/ip-name-lookup@0.2.1".
wasi/sockets/network
Package network represents the imported interface "wasi:sockets/network@0.2.1".
Package network represents the imported interface "wasi:sockets/network@0.2.1".
wasi/sockets/tcp
Package tcp represents the imported interface "wasi:sockets/tcp@0.2.1".
Package tcp represents the imported interface "wasi:sockets/tcp@0.2.1".
wasi/sockets/tcp-create-socket
Package tcpcreatesocket represents the imported interface "wasi:sockets/tcp-create-socket@0.2.1".
Package tcpcreatesocket represents the imported interface "wasi:sockets/tcp-create-socket@0.2.1".
wasi/sockets/udp
Package udp represents the imported interface "wasi:sockets/udp@0.2.1".
Package udp represents the imported interface "wasi:sockets/udp@0.2.1".
wasi/sockets/udp-create-socket
Package udpcreatesocket represents the imported interface "wasi:sockets/udp-create-socket@0.2.1".
Package udpcreatesocket represents the imported interface "wasi:sockets/udp-create-socket@0.2.1".
wasiext/http/ext
Package ext represents the imported interface "wasiext:http/ext@0.1.0".
Package ext represents the imported interface "wasiext:http/ext@0.1.0".
wasiext/http/imports
Package imports represents the world "wasiext:http/imports@0.1.0".
Package imports represents the world "wasiext:http/imports@0.1.0".
cmd
examples
go/http/bindings/wadge-examples/http/app
Package app represents the world "wadge-examples:http/app".
Package app represents the world "wadge-examples:http/app".
go/http/bindings/wasi/cli/environment
Package environment represents the imported interface "wasi:cli/environment@0.2.0".
Package environment represents the imported interface "wasi:cli/environment@0.2.0".
go/http/bindings/wasi/cli/exit
Package exit represents the imported interface "wasi:cli/exit@0.2.0".
Package exit represents the imported interface "wasi:cli/exit@0.2.0".
go/http/bindings/wasi/cli/stderr
Package stderr represents the imported interface "wasi:cli/stderr@0.2.0".
Package stderr represents the imported interface "wasi:cli/stderr@0.2.0".
go/http/bindings/wasi/cli/stdin
Package stdin represents the imported interface "wasi:cli/stdin@0.2.0".
Package stdin represents the imported interface "wasi:cli/stdin@0.2.0".
go/http/bindings/wasi/cli/stdout
Package stdout represents the imported interface "wasi:cli/stdout@0.2.0".
Package stdout represents the imported interface "wasi:cli/stdout@0.2.0".
go/http/bindings/wasi/cli/terminal-input
Package terminalinput represents the imported interface "wasi:cli/terminal-input@0.2.0".
Package terminalinput represents the imported interface "wasi:cli/terminal-input@0.2.0".
go/http/bindings/wasi/cli/terminal-output
Package terminaloutput represents the imported interface "wasi:cli/terminal-output@0.2.0".
Package terminaloutput represents the imported interface "wasi:cli/terminal-output@0.2.0".
go/http/bindings/wasi/cli/terminal-stderr
Package terminalstderr represents the imported interface "wasi:cli/terminal-stderr@0.2.0".
Package terminalstderr represents the imported interface "wasi:cli/terminal-stderr@0.2.0".
go/http/bindings/wasi/cli/terminal-stdin
Package terminalstdin represents the imported interface "wasi:cli/terminal-stdin@0.2.0".
Package terminalstdin represents the imported interface "wasi:cli/terminal-stdin@0.2.0".
go/http/bindings/wasi/cli/terminal-stdout
Package terminalstdout represents the imported interface "wasi:cli/terminal-stdout@0.2.0".
Package terminalstdout represents the imported interface "wasi:cli/terminal-stdout@0.2.0".
go/http/bindings/wasi/clocks/monotonic-clock
Package monotonicclock represents the imported interface "wasi:clocks/monotonic-clock@0.2.0".
Package monotonicclock represents the imported interface "wasi:clocks/monotonic-clock@0.2.0".
go/http/bindings/wasi/clocks/wall-clock
Package wallclock represents the imported interface "wasi:clocks/wall-clock@0.2.0".
Package wallclock represents the imported interface "wasi:clocks/wall-clock@0.2.0".
go/http/bindings/wasi/filesystem/preopens
Package preopens represents the imported interface "wasi:filesystem/preopens@0.2.0".
Package preopens represents the imported interface "wasi:filesystem/preopens@0.2.0".
go/http/bindings/wasi/filesystem/types
Package types represents the imported interface "wasi:filesystem/types@0.2.0".
Package types represents the imported interface "wasi:filesystem/types@0.2.0".
go/http/bindings/wasi/http/incoming-handler
Package incominghandler represents the exported interface "wasi:http/incoming-handler@0.2.0".
Package incominghandler represents the exported interface "wasi:http/incoming-handler@0.2.0".
go/http/bindings/wasi/http/outgoing-handler
Package outgoinghandler represents the imported interface "wasi:http/outgoing-handler@0.2.0".
Package outgoinghandler represents the imported interface "wasi:http/outgoing-handler@0.2.0".
go/http/bindings/wasi/http/types
Package types represents the imported interface "wasi:http/types@0.2.0".
Package types represents the imported interface "wasi:http/types@0.2.0".
go/http/bindings/wasi/io/error
Package ioerror represents the imported interface "wasi:io/error@0.2.0".
Package ioerror represents the imported interface "wasi:io/error@0.2.0".
go/http/bindings/wasi/io/poll
Package poll represents the imported interface "wasi:io/poll@0.2.0".
Package poll represents the imported interface "wasi:io/poll@0.2.0".
go/http/bindings/wasi/io/streams
Package streams represents the imported interface "wasi:io/streams@0.2.0".
Package streams represents the imported interface "wasi:io/streams@0.2.0".
go/http/bindings/wasi/random/insecure
Package insecure represents the imported interface "wasi:random/insecure@0.2.0".
Package insecure represents the imported interface "wasi:random/insecure@0.2.0".
go/http/bindings/wasi/random/insecure-seed
Package insecureseed represents the imported interface "wasi:random/insecure-seed@0.2.0".
Package insecureseed represents the imported interface "wasi:random/insecure-seed@0.2.0".
go/http/bindings/wasi/random/random
Package random represents the imported interface "wasi:random/random@0.2.0".
Package random represents the imported interface "wasi:random/random@0.2.0".
go/http/bindings/wasi/sockets/instance-network
Package instancenetwork represents the imported interface "wasi:sockets/instance-network@0.2.0".
Package instancenetwork represents the imported interface "wasi:sockets/instance-network@0.2.0".
go/http/bindings/wasi/sockets/ip-name-lookup
Package ipnamelookup represents the imported interface "wasi:sockets/ip-name-lookup@0.2.0".
Package ipnamelookup represents the imported interface "wasi:sockets/ip-name-lookup@0.2.0".
go/http/bindings/wasi/sockets/network
Package network represents the imported interface "wasi:sockets/network@0.2.0".
Package network represents the imported interface "wasi:sockets/network@0.2.0".
go/http/bindings/wasi/sockets/tcp
Package tcp represents the imported interface "wasi:sockets/tcp@0.2.0".
Package tcp represents the imported interface "wasi:sockets/tcp@0.2.0".
go/http/bindings/wasi/sockets/tcp-create-socket
Package tcpcreatesocket represents the imported interface "wasi:sockets/tcp-create-socket@0.2.0".
Package tcpcreatesocket represents the imported interface "wasi:sockets/tcp-create-socket@0.2.0".
go/http/bindings/wasi/sockets/udp
Package udp represents the imported interface "wasi:sockets/udp@0.2.0".
Package udp represents the imported interface "wasi:sockets/udp@0.2.0".
go/http/bindings/wasi/sockets/udp-create-socket
Package udpcreatesocket represents the imported interface "wasi:sockets/udp-create-socket@0.2.0".
Package udpcreatesocket represents the imported interface "wasi:sockets/udp-create-socket@0.2.0".
internal
lib
tests
go/sync/bindings/wadge-test/sync/guest
Package guest represents the world "wadge-test:sync/guest".
Package guest represents the world "wadge-test:sync/guest".
go/sync/bindings/wadge-test/sync/sync
Package sync represents the imported interface "wadge-test:sync/sync".
Package sync represents the imported interface "wadge-test:sync/sync".
go/wasi/bindings/wadge-test/fib/fib
Package fib represents the imported interface "wadge-test:fib/fib".
Package fib represents the imported interface "wadge-test:fib/fib".
go/wasi/bindings/wadge-test/leftpad/leftpad
Package leftpad represents the imported interface "wadge-test:leftpad/leftpad".
Package leftpad represents the imported interface "wadge-test:leftpad/leftpad".
go/wasi/bindings/wadge-test/wasi/service
Package service represents the world "wadge-test:wasi/service".
Package service represents the world "wadge-test:wasi/service".
go/wasi/bindings/wasi/cli/environment
Package environment represents the imported interface "wasi:cli/environment@0.2.1".
Package environment represents the imported interface "wasi:cli/environment@0.2.1".
go/wasi/bindings/wasi/cli/exit
Package exit represents the imported interface "wasi:cli/exit@0.2.1".
Package exit represents the imported interface "wasi:cli/exit@0.2.1".
go/wasi/bindings/wasi/cli/stderr
Package stderr represents the imported interface "wasi:cli/stderr@0.2.1".
Package stderr represents the imported interface "wasi:cli/stderr@0.2.1".
go/wasi/bindings/wasi/cli/stdin
Package stdin represents the imported interface "wasi:cli/stdin@0.2.1".
Package stdin represents the imported interface "wasi:cli/stdin@0.2.1".
go/wasi/bindings/wasi/cli/stdout
Package stdout represents the imported interface "wasi:cli/stdout@0.2.1".
Package stdout represents the imported interface "wasi:cli/stdout@0.2.1".
go/wasi/bindings/wasi/cli/terminal-input
Package terminalinput represents the imported interface "wasi:cli/terminal-input@0.2.1".
Package terminalinput represents the imported interface "wasi:cli/terminal-input@0.2.1".
go/wasi/bindings/wasi/cli/terminal-output
Package terminaloutput represents the imported interface "wasi:cli/terminal-output@0.2.1".
Package terminaloutput represents the imported interface "wasi:cli/terminal-output@0.2.1".
go/wasi/bindings/wasi/cli/terminal-stderr
Package terminalstderr represents the imported interface "wasi:cli/terminal-stderr@0.2.1".
Package terminalstderr represents the imported interface "wasi:cli/terminal-stderr@0.2.1".
go/wasi/bindings/wasi/cli/terminal-stdin
Package terminalstdin represents the imported interface "wasi:cli/terminal-stdin@0.2.1".
Package terminalstdin represents the imported interface "wasi:cli/terminal-stdin@0.2.1".
go/wasi/bindings/wasi/cli/terminal-stdout
Package terminalstdout represents the imported interface "wasi:cli/terminal-stdout@0.2.1".
Package terminalstdout represents the imported interface "wasi:cli/terminal-stdout@0.2.1".
go/wasi/bindings/wasi/clocks/monotonic-clock
Package monotonicclock represents the imported interface "wasi:clocks/monotonic-clock@0.2.1".
Package monotonicclock represents the imported interface "wasi:clocks/monotonic-clock@0.2.1".
go/wasi/bindings/wasi/clocks/timezone
Package timezone represents the imported interface "wasi:clocks/timezone@0.2.1".
Package timezone represents the imported interface "wasi:clocks/timezone@0.2.1".
go/wasi/bindings/wasi/clocks/wall-clock
Package wallclock represents the imported interface "wasi:clocks/wall-clock@0.2.1".
Package wallclock represents the imported interface "wasi:clocks/wall-clock@0.2.1".
go/wasi/bindings/wasi/filesystem/preopens
Package preopens represents the imported interface "wasi:filesystem/preopens@0.2.1".
Package preopens represents the imported interface "wasi:filesystem/preopens@0.2.1".
go/wasi/bindings/wasi/filesystem/types
Package types represents the imported interface "wasi:filesystem/types@0.2.1".
Package types represents the imported interface "wasi:filesystem/types@0.2.1".
go/wasi/bindings/wasi/http/incoming-handler
Package incominghandler represents the exported interface "wasi:http/incoming-handler@0.2.1".
Package incominghandler represents the exported interface "wasi:http/incoming-handler@0.2.1".
go/wasi/bindings/wasi/http/types
Package types represents the imported interface "wasi:http/types@0.2.1".
Package types represents the imported interface "wasi:http/types@0.2.1".
go/wasi/bindings/wasi/io/error
Package ioerror represents the imported interface "wasi:io/error@0.2.1".
Package ioerror represents the imported interface "wasi:io/error@0.2.1".
go/wasi/bindings/wasi/io/poll
Package poll represents the imported interface "wasi:io/poll@0.2.1".
Package poll represents the imported interface "wasi:io/poll@0.2.1".
go/wasi/bindings/wasi/io/streams
Package streams represents the imported interface "wasi:io/streams@0.2.1".
Package streams represents the imported interface "wasi:io/streams@0.2.1".
go/wasi/bindings/wasi/random/insecure
Package insecure represents the imported interface "wasi:random/insecure@0.2.1".
Package insecure represents the imported interface "wasi:random/insecure@0.2.1".
go/wasi/bindings/wasi/random/insecure-seed
Package insecureseed represents the imported interface "wasi:random/insecure-seed@0.2.1".
Package insecureseed represents the imported interface "wasi:random/insecure-seed@0.2.1".
go/wasi/bindings/wasi/random/random
Package random represents the imported interface "wasi:random/random@0.2.1".
Package random represents the imported interface "wasi:random/random@0.2.1".
go/wasi/bindings/wasi/sockets/instance-network
Package instancenetwork represents the imported interface "wasi:sockets/instance-network@0.2.1".
Package instancenetwork represents the imported interface "wasi:sockets/instance-network@0.2.1".
go/wasi/bindings/wasi/sockets/ip-name-lookup
Package ipnamelookup represents the imported interface "wasi:sockets/ip-name-lookup@0.2.1".
Package ipnamelookup represents the imported interface "wasi:sockets/ip-name-lookup@0.2.1".
go/wasi/bindings/wasi/sockets/network
Package network represents the imported interface "wasi:sockets/network@0.2.1".
Package network represents the imported interface "wasi:sockets/network@0.2.1".
go/wasi/bindings/wasi/sockets/tcp
Package tcp represents the imported interface "wasi:sockets/tcp@0.2.1".
Package tcp represents the imported interface "wasi:sockets/tcp@0.2.1".
go/wasi/bindings/wasi/sockets/tcp-create-socket
Package tcpcreatesocket represents the imported interface "wasi:sockets/tcp-create-socket@0.2.1".
Package tcpcreatesocket represents the imported interface "wasi:sockets/tcp-create-socket@0.2.1".
go/wasi/bindings/wasi/sockets/udp
Package udp represents the imported interface "wasi:sockets/udp@0.2.1".
Package udp represents the imported interface "wasi:sockets/udp@0.2.1".
go/wasi/bindings/wasi/sockets/udp-create-socket
Package udpcreatesocket represents the imported interface "wasi:sockets/udp-create-socket@0.2.1".
Package udpcreatesocket represents the imported interface "wasi:sockets/udp-create-socket@0.2.1".

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL