Drop ids, staged writes and publish from the filesystem contract
This commit is contained in:
+1
-1
@@ -14,5 +14,5 @@ pub use exports::memona::filesystem::provider::{
|
||||
};
|
||||
pub use memona::filesystem::host::{
|
||||
Exchange, Header, HostError, LogLevel, Method, Request, Response, Setting,
|
||||
Tcp, Udp, bind, config, connect, http, invalidate_token, log,
|
||||
Tcp, Udp, bind, config, connect, http, log,
|
||||
};
|
||||
|
||||
+10
-25
@@ -74,9 +74,6 @@ interface host {
|
||||
variant setting { text(string), secret(string), toggle(bool) }
|
||||
/// Reads configuration or a session-only credential for this connection.
|
||||
config: func(key: string) -> option<setting>;
|
||||
/// Reports that the current access token was rejected. The host refreshes
|
||||
/// it once; a second rejection surfaces to the caller as denied.
|
||||
invalidate-token: func();
|
||||
|
||||
/// Emits a diagnostic event. Never include secrets or private document data.
|
||||
log: func(level: log-level, message: string);
|
||||
@@ -101,36 +98,28 @@ interface provider {
|
||||
|
||||
/// An opaque version token, at most 4096 UTF-8 bytes.
|
||||
type revision = string;
|
||||
/// An opaque backend identity, at most 4096 UTF-8 bytes. The host never
|
||||
/// parses, orders, or shows one, and never keeps one past the connection,
|
||||
/// because a backend may reuse it.
|
||||
type resource-id = string;
|
||||
|
||||
/// How one resource is named. A provider that hands out ids must accept
|
||||
/// them back; one that does not may reject every id as invalid-input.
|
||||
variant locator { path(string), id(resource-id) }
|
||||
/// How one resource is named: a path within the connection root.
|
||||
variant locator { path(string) }
|
||||
|
||||
/// Optional operations. False capabilities must return unsupported.
|
||||
/// Conditional-write promises atomic create-only and revision comparisons,
|
||||
/// and cannot be combined with staged-write, where nothing to compare
|
||||
/// exists until a publish lands. Virtual-directories says a directory is
|
||||
/// only ever a prefix of something stored, as in a flat object store: the
|
||||
/// host then never offers to create an empty one, warns that removing the
|
||||
/// last child removes the folder, and does not call a vanished folder an
|
||||
/// error. Such a provider may still accept mkdir by writing a marker, and
|
||||
/// must answer unsupported when asked to rename a directory.
|
||||
/// Conditional-write promises atomic create-only and revision comparisons.
|
||||
/// Virtual-directories says a directory is only ever a prefix of something
|
||||
/// stored, as in a flat object store: the host then never offers to create
|
||||
/// an empty one, warns that removing the last child removes the folder,
|
||||
/// and does not call a vanished folder an error. Such a provider may still
|
||||
/// accept mkdir by writing a marker, and must answer unsupported when
|
||||
/// asked to rename a directory.
|
||||
record capabilities {
|
||||
write: bool, mkdir: bool, rename: bool, remove: bool,
|
||||
conditional-write: bool, watch: bool,
|
||||
staged-write: bool, publishable: bool,
|
||||
virtual-directories: bool,
|
||||
}
|
||||
/// Byte length, an opaque revision, and a backend identity, each if known.
|
||||
/// Byte length and an opaque revision, each if known.
|
||||
record file-info {
|
||||
kind: entry-kind,
|
||||
size: u64,
|
||||
revision: option<revision>,
|
||||
id: option<resource-id>,
|
||||
}
|
||||
/// One child name, without slashes, dot segments, or control characters.
|
||||
record entry { name: string, info: file-info }
|
||||
@@ -198,10 +187,6 @@ interface provider {
|
||||
/// Polls for a bounded change page if the watch capability is present. No
|
||||
/// background callback or persistent subscription is installed by the host.
|
||||
poll: func(cursor: option<string>) -> result<change-page, error-code>;
|
||||
/// Makes every staged write visible as one new root, if the publishable
|
||||
/// capability is present, and names it, for example as a content
|
||||
/// identifier. A none result means the publish needs another call.
|
||||
publish: func() -> result<option<revision>, error-code>;
|
||||
}
|
||||
|
||||
/// Memona filesystem extension ABI 0.1.0, distributed as a WebAssembly component.
|
||||
|
||||
Reference in New Issue
Block a user