WIT
package root:component;
world root {
import componentized:services/types;
import componentized:services/lifecycle;
import wasi:logging/logging@0.1.0-draft;
import wasi:cli/environment@0.2.6;
import wasi:io/error@0.2.6;
import wasi:io/streams@0.2.6;
import wasi:cli/stdout@0.2.6;
import wasi:random/random@0.2.6;
export wasi:cli/run@0.2.6;
}
package componentized:services {
interface types {
type service-id = string;
type service-instance-id = service-id;
type tier = string;
record request {
key: string,
value: string,
}
type error = string;
type service-binding-id = service-id;
type scope = string;
}
interface lifecycle {
use types.{service-instance-id, tier, request, error, service-binding-id, scope};
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:logging@0.1.0-draft {
interface logging {
enum level {
trace,
debug,
info,
warn,
error,
critical,
}
log: func(level: level, context: string, message: string);
}
}
package wasi:io@0.2.6 {
interface error {
resource error;
}
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,
}
}
}
package wasi:cli@0.2.6 {
interface environment {
get-arguments: func() -> list<string>;
}
interface stdout {
use wasi:io/streams@0.2.6.{output-stream};
get-stdout: func() -> output-stream;
}
interface run {
run: func() -> result;
}
}
package wasi:random@0.2.6 {
interface random {
get-random-bytes: func(len: u64) -> list<u8>;
}
}