Resource

bucket

A bucket is a collection of key-value pairs. Each key-value pair is stored as an entry in the bucket, and the bucket itself acts as a collection of all these entries.

resource bucket;

F get

get: async func(key: string) -> result​<option​<list​<u8>>, error>;

Get the value associated with the specified key

The value is returned as an option. If the key-value pair exists in the store, it returns ok(value). If the key does not exist in the store, it returns ok(none).

If any other error occurs, it returns an err(error).

F set

set: async func(key: string, value: list​<u8>, options: option​<set-options>) -> result​<_, error>;

Set the value associated with the key in the store. If the key already exists in the store, it overwrites the value.

If the key does not exist in the store, it creates a new key-value pair.

options controls expiry (ttl-ms) and conditional writes (if-not-exists); pass none for the default overwrite-on-exists behavior with no expiry.

If any other error occurs, it returns an err(error).

F delete

delete: async func(key: string) -> result​<_, error>;

Delete the key-value pair associated with the key in the store.

If the key does not exist in the store, it does nothing.

If any other error occurs, it returns an err(error).

F exists

exists: async func(key: string) -> result​<bool, error>;

Check if the key exists in the store.

If the key exists in the store, it returns ok(true). If the key does not exist in the store, it returns ok(false).

If any other error occurs, it returns an err(error).

F list-keys

list-keys: async func(prefix: option​<string>, cursor: option​<string>) -> result​<key-response, error>;

Get the keys in the store, optionally restricted to those starting with prefix, with an optional cursor (for use in pagination). It returns a list of keys. Please note that for most KeyValue implementations, this can be a very expensive operation and so it should be used judiciously. Implementations can return any number of keys in a single response, but they should never attempt to send more data than is reasonable (i.e. on a small edge device, this may only be a few KB, while on a large machine this could be several MB). Any response should also return a cursor that can be used to fetch the next page of keys. See the key-response record for more information.

prefix filters the result to keys that begin with the given string; pass none to list all keys. When paginating, the same prefix should be supplied alongside each cursor.

Note that the keys are not guaranteed to be returned in any particular order.

If the store is empty (or no keys match prefix), it returns an empty list.

MAY show an out-of-date list of keys if there are concurrent writes to the store.

If any error occurs, it returns an err(error).