blob: 7af3c4938b8c153c802b847b99878483602877c8 [file] [log] [blame]
// TODO(sadovsky): Copy struct and interface comments from VDL files.
// TODO(sadovsky): This should probably be something else.
module mojo;
// TODO(sadovsky): Put structs in a separate types.mojom file.
// TODO(sadovsky): Loose representation of verror. Improve this.
struct Error {
string id; // empty string means no error
uint32 action_code;
string msg;
};
// TODO(sadovsky): Decide how to represent perms.
struct Perms {
string json;
};
struct BatchOptions {
string hint;
bool read_only;
};
struct PrefixPerms {
string prefix;
Perms perms;
};
struct SyncGroupSpec {
string description;
Perms perms;
array<string> prefixes;
array<string> mount_tables;
bool is_private;
};
struct SyncGroupMemberInfo {
uint8 sync_priority;
};
struct Result {
array<array<uint8>> values;
};
interface ExecStream {
OnResult(Result result);
OnDone(Error err);
};
struct KeyValue {
string key;
array<uint8> value;
};
interface ScanStream {
OnKeyValue(KeyValue key_value);
OnDone(Error err);
};
// TODO(sadovsky): Add schema version to all RPCs. See v.io/c/13734.
// All 'name' params are service-relative object names.
// Error handling modeled after:
// https://github.com/domokit/mojo/blob/master/mojo/services/files/public/interfaces/file.mojom
interface Syncbase {
////////////////////////////////////////
// Service
ServiceGetPermissions() => (Error err, Perms perms, string version);
ServiceSetPermissions(Perms perms, string version) => (Error err);
////////////////////////////////////////
// App
AppCreate(string name, Perms perms) => (Error err);
AppDelete(string name) => (Error err);
AppExists(string name) => (Error err, bool exists);
AppGetPermissions(string name) => (Error err, Perms perms, string version);
AppSetPermissions(string name, Perms perms, string version) => (Error err);
////////////////////////////////////////
// nosql.Database
// TODO(sadovsky): Add SchemaMetadata argument.
DbCreate(string name, Perms perms) => (Error err);
DbDelete(string name) => (Error err);
DbExists(string name) => (Error err, bool exists);
DbExec(string name, string query, ExecStream& stream) => (Error err);
DbBeginBatch(string name, BatchOptions? bo) => (Error err, string batch_dn);
DbCommit(string name) => (Error err);
DbAbort(string name) => (Error err);
DbGetPermissions(string name) => (Error err, Perms perms, string version);
DbSetPermissions(string name, Perms perms, string version) => (Error err);
// TODO(sadovsky): Add DatabaseWatcher, BlobManager, and SchemaManager
// methods.
////////////////////////////////////////
// nosql.Database:SyncGroupManager
DbGetSyncGroupNames(string name) => (Error err, array<string> names);
DbCreateSyncGroup(
string name, string sg_name, SyncGroupSpec spec,
SyncGroupMemberInfo my_info)
=> (Error err);
DbJoinSyncGroup(string name, string sg_name, SyncGroupMemberInfo my_info)
=> (Error err);
DbLeaveSyncGroup(string name, string sg_name) => (Error err);
DbDestroySyncGroup(string name, string sg_name) => (Error err);
DbEjectFromSyncGroup(string name, string sg_name, string member)
=> (Error err);
DbGetSyncGroupSpec(string name, string sg_name)
=> (Error err, SyncGroupSpec spec, string version);
DbSetSyncGroupSpec(
string name, string sg_name, SyncGroupSpec spec, string version)
=> (Error err);
DbGetSyncGroupMembers(string name, string sg_name)
=> (Error err, map<string, SyncGroupMemberInfo> infos);
////////////////////////////////////////
// nosql.Table
TableCreate(string name, Perms perms) => (Error err);
TableDelete(string name) => (Error err);
TableExists(string name) => (Error err, bool exists);
TableDeleteRowRange(string name, array<uint8> start, array<uint8> limit)
=> (Error err);
TableScan(
string name, array<uint8> start, array<uint8> limit, ScanStream& stream)
=> (Error err);
TableGetPermissions(string name, string key)
=> (Error err, array<PrefixPerms> perms_arr);
TableSetPermissions(string name, string prefix, Perms perms) => (Error err);
TableDeletePermissions(string name, string prefix) => (Error err);
////////////////////////////////////////
// nosql.Row
RowExists(string name) => (Error err, bool exists);
RowGet(string name) => (Error err, array<uint8> value);
RowPut(string name, array<uint8> value) => (Error err);
RowDelete(string name) => (Error err);
};