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.3;
import wasi:io/error@0.2.3;
import wasi:io/streams@0.2.3;
import wasi:cli/stdout@0.2.3;
export wasi:cli/run@0.2.3;
}
package componentized:services {
interface types {
type context = list<u8>;
type tier = string;
record request {
key: string,
value: string,
}
type service-instance-id = string;
type error = string;
type scope = string;
type service-binding-id = string;
}
interface lifecycle {
use types.{context, tier, request, service-instance-id, error, scope, service-binding-id};
provision: func(ctx: context, %type: string, tier: option<tier>, requests: option<list<request>>) -> result<service-instance-id, 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(ctx: context, instance-id: service-instance-id, scopes: option<list<scope>>) -> result<service-binding-id, error>;
list-bindings: func(instance-id: service-instance-id) -> result<list<service-binding-id>, error>;
unbind: func(binding-id: service-binding-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.3 {
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.3 {
interface environment {
get-arguments: func() -> list<string>;
}
interface stdout {
use wasi:io/streams@0.2.3.{output-stream};
get-stdout: func() -> output-stream;
}
interface run {
run: func() -> result;
}
}