WIT
package root:component;
world root {
import componentized:services/types;
import componentized:services/credential-admin;
import wasi:io/poll@0.2.6;
import wasi:clocks/wall-clock@0.2.6;
import wasi:config/store@0.2.0-rc.1;
import wasi:io/error@0.2.6;
import wasi:io/streams@0.2.6;
import wasi:filesystem/types@0.2.6;
import wasi:filesystem/preopens@0.2.6;
import wasi:sockets/udp@0.2.6;
import wasi:sockets/tcp@0.2.6;
import wasi:cli/environment@0.2.6;
import wasi:cli/exit@0.2.6;
import wasi:cli/stdin@0.2.6;
import wasi:cli/stdout@0.2.6;
import wasi:cli/stderr@0.2.6;
import wasi:cli/terminal-input@0.2.6;
import wasi:cli/terminal-output@0.2.6;
import wasi:cli/terminal-stdin@0.2.6;
import wasi:cli/terminal-stdout@0.2.6;
import wasi:cli/terminal-stderr@0.2.6;
export componentized:services/lifecycle;
}
package componentized:services {
interface types {
type service-id = string;
type error = string;
record credential {
key: string,
value: string,
}
type service-instance-id = service-id;
type service-binding-id = service-id;
record request {
key: string,
value: string,
}
type scope = string;
type tier = string;
}
interface credential-admin {
use types.{service-id, error, credential};
publish: func(id: service-id, credentials: list<credential>) -> result<_, error>;
destroy: func(id: service-id) -> result<_, error>;
}
interface lifecycle {
use types.{service-instance-id, service-binding-id, request, scope, tier, error};
provision: func(instance-id: service-instance-id, %type: string, tier: option<tier>, requests: option<list<request>>) -> result<_, error>;
update: func(instance-id: service-instance-id, tier: option<tier>, requests: option<list<request>>) -> result<_, error>;
destroy: func(instance-id: service-instance-id, retain: option<bool>) -> result<_, error>;
bind: func(binding-id: service-binding-id, instance-id: service-instance-id, scopes: option<list<scope>>) -> result<_, error>;
list-bindings: func(instance-id: service-instance-id) -> result<list<service-binding-id>, error>;
unbind: func(binding-id: service-binding-id, instance-id: service-instance-id) -> result<_, error>;
}
}
package wasi:io@0.2.6 {
interface poll {
resource pollable;
}
interface error {
resource error {
to-debug-string: func() -> string;
}
}
interface streams {
use error.{error};
resource output-stream {
blocking-write-and-flush: func(contents: list<u8>) -> result<_, stream-error>;
}
variant stream-error {
last-operation-failed(error),
closed,
}
resource input-stream;
}
}
package wasi:clocks@0.2.6 {
interface wall-clock {
record datetime {
seconds: u64,
nanoseconds: u32,
}
now: func() -> datetime;
}
}
package wasi:config@0.2.0-rc.1 {
interface store {
variant error {
upstream(string),
io(string),
}
get: func(key: string) -> result<option<string>, error>;
}
}
package wasi:filesystem@0.2.6 {
interface types {
use wasi:clocks/wall-clock@0.2.6.{datetime};
resource directory-entry-stream {
read-directory-entry: func() -> result<option<directory-entry>, error-code>;
}
resource descriptor {
get-type: func() -> result<descriptor-type, error-code>;
read-directory: func() -> result<directory-entry-stream, error-code>;
create-directory-at: func(path: string) -> result<_, error-code>;
stat: func() -> result<descriptor-stat, error-code>;
stat-at: func(path-flags: path-flags, path: string) -> result<descriptor-stat, error-code>;
open-at: func(path-flags: path-flags, path: string, open-flags: open-flags, %flags: descriptor-flags) -> result<descriptor, error-code>;
remove-directory-at: func(path: string) -> result<_, error-code>;
symlink-at: func(old-path: string, new-path: string) -> result<_, error-code>;
unlink-file-at: func(path: string) -> result<_, error-code>;
metadata-hash: func() -> result<metadata-hash-value, error-code>;
metadata-hash-at: func(path-flags: path-flags, path: string) -> result<metadata-hash-value, error-code>;
}
enum error-code {
access,
would-block,
already,
bad-descriptor,
busy,
deadlock,
quota,
exist,
file-too-large,
illegal-byte-sequence,
in-progress,
interrupted,
invalid,
io,
is-directory,
loop,
too-many-links,
message-size,
name-too-long,
no-device,
no-entry,
no-lock,
insufficient-memory,
insufficient-space,
not-directory,
not-empty,
not-recoverable,
unsupported,
no-tty,
no-such-device,
overflow,
not-permitted,
pipe,
read-only,
invalid-seek,
text-file-busy,
cross-device,
}
enum descriptor-type {
unknown,
block-device,
character-device,
directory,
fifo,
symbolic-link,
regular-file,
socket,
}
record directory-entry {
%type: descriptor-type,
name: string,
}
flags path-flags {
symlink-follow,
}
type link-count = u64;
type filesize = u64;
record descriptor-stat {
%type: descriptor-type,
link-count: link-count,
size: filesize,
data-access-timestamp: option<datetime>,
data-modification-timestamp: option<datetime>,
status-change-timestamp: option<datetime>,
}
flags open-flags {
create,
directory,
exclusive,
truncate,
}
flags descriptor-flags {
read,
write,
file-integrity-sync,
data-integrity-sync,
requested-write-sync,
mutate-directory,
}
record metadata-hash-value {
lower: u64,
upper: u64,
}
}
interface preopens {
use types.{descriptor};
get-directories: func() -> list<tuple<descriptor, string>>;
}
}
package wasi:sockets@0.2.6 {
interface udp {
resource udp-socket;
resource incoming-datagram-stream;
resource outgoing-datagram-stream;
}
interface tcp {
resource tcp-socket;
}
}
package wasi:cli@0.2.6 {
interface environment {
get-environment: func() -> list<tuple<string, string>>;
}
interface exit {
exit: func(status: result);
}
interface stdin {
use wasi:io/streams@0.2.6.{input-stream};
get-stdin: func() -> input-stream;
}
interface stdout {
use wasi:io/streams@0.2.6.{output-stream};
get-stdout: func() -> output-stream;
}
interface stderr {
use wasi:io/streams@0.2.6.{output-stream};
get-stderr: func() -> output-stream;
}
interface terminal-input {
resource terminal-input;
}
interface terminal-output {
resource terminal-output;
}
interface terminal-stdin {
use terminal-input.{terminal-input};
get-terminal-stdin: func() -> option<terminal-input>;
}
interface terminal-stdout {
use terminal-output.{terminal-output};
get-terminal-stdout: func() -> option<terminal-output>;
}
interface terminal-stderr {
use terminal-output.{terminal-output};
get-terminal-stderr: func() -> option<terminal-output>;
}
}