syntax = "proto2"; package workspace; import "common.proto"; import "files.proto"; service Workspace { rpc Attach (common.Empty) returns (stream WorkspaceEvent); rpc CreateBuffer (files.BufferNode) returns (common.Empty); rpc AccessBuffer (files.BufferNode) returns (common.Token); rpc DeleteBuffer (files.BufferNode) returns (common.Empty); rpc ListBuffers (common.Empty) returns (files.BufferTree); rpc ListUsers (common.Empty) returns (UserList); rpc ListBufferUsers (files.BufferNode) returns (UserList); } message UserList { repeated common.User users = 1; } message WorkspaceEvent { message UserJoin { required common.User user = 1; } message UserLeave { required common.User user = 1; } message FileCreate { required string path = 1; } message FileRename { required string before = 1; required string after = 2; } message FileDelete { required string path = 1; } oneof event { UserJoin join = 1; UserLeave leave = 2; FileCreate create = 3; FileRename rename = 4; FileDelete delete = 5; } }