zed.proto

  1syntax = "proto3";
  2package zed.messages;
  3
  4message Envelope {
  5    uint32 id = 1;
  6    optional uint32 responding_to = 2;
  7    optional uint32 original_sender_id = 3;
  8    oneof payload {
  9        Ack ack = 4;
 10        Error error = 5;
 11        Ping ping = 6;
 12        ShareWorktree share_worktree = 7;
 13        ShareWorktreeResponse share_worktree_response = 8;
 14        OpenWorktree open_worktree = 9;
 15        OpenWorktreeResponse open_worktree_response = 10;
 16        UpdateWorktree update_worktree = 11;
 17        CloseWorktree close_worktree = 12;
 18        OpenBuffer open_buffer = 13;
 19        OpenBufferResponse open_buffer_response = 14;
 20        CloseBuffer close_buffer = 15;
 21        UpdateBuffer update_buffer = 16;
 22        SaveBuffer save_buffer = 17;
 23        BufferSaved buffer_saved = 18;
 24        AddPeer add_peer = 19;
 25        RemovePeer remove_peer = 20;
 26        GetChannels get_channels = 21;
 27        GetChannelsResponse get_channels_response = 22;
 28        GetUsers get_users = 23;
 29        GetUsersResponse get_users_response = 24;
 30        JoinChannel join_channel = 25;
 31        JoinChannelResponse join_channel_response = 26;
 32        LeaveChannel leave_channel = 27;
 33        SendChannelMessage send_channel_message = 28;
 34        SendChannelMessageResponse send_channel_message_response = 29;
 35        ChannelMessageSent channel_message_sent = 30;
 36        GetChannelMessages get_channel_messages = 31;
 37        GetChannelMessagesResponse get_channel_messages_response = 32;
 38    }
 39}
 40
 41// Messages
 42
 43message Ping {}
 44
 45message Ack {}
 46
 47message Error {
 48    string message = 1;
 49}
 50
 51message ShareWorktree {
 52    Worktree worktree = 1;
 53}
 54
 55message ShareWorktreeResponse {
 56    uint64 worktree_id = 1;
 57    string access_token = 2;
 58}
 59
 60message OpenWorktree {
 61    uint64 worktree_id = 1;
 62    string access_token = 2;
 63}
 64
 65message OpenWorktreeResponse {
 66    uint64 worktree_id = 1;
 67    Worktree worktree = 2;
 68    uint32 replica_id = 3;
 69    repeated Peer peers = 4;
 70}
 71
 72message UpdateWorktree {
 73    uint64 worktree_id = 1;
 74    repeated Entry updated_entries = 2;
 75    repeated uint64 removed_entries = 3;
 76}
 77
 78message CloseWorktree {
 79    uint64 worktree_id = 1;
 80}
 81
 82message AddPeer {
 83    uint64 worktree_id = 1;
 84    Peer peer = 2;
 85}
 86
 87message RemovePeer {
 88    uint64 worktree_id = 1;
 89    uint32 peer_id = 2;
 90}
 91
 92message OpenBuffer {
 93    uint64 worktree_id = 1;
 94    string path = 2;
 95}
 96
 97message OpenBufferResponse {
 98    Buffer buffer = 1;
 99}
100
101message CloseBuffer {
102    uint64 worktree_id = 1;
103    uint64 buffer_id = 2;
104}
105
106message UpdateBuffer {
107    uint64 worktree_id = 1;
108    uint64 buffer_id = 2;
109    repeated Operation operations = 3;
110}
111
112message SaveBuffer {
113    uint64 worktree_id = 1;
114    uint64 buffer_id = 2;
115}
116
117message BufferSaved {
118    uint64 worktree_id = 1;
119    uint64 buffer_id = 2;
120    repeated VectorClockEntry version = 3;
121    Timestamp mtime = 4;
122}
123
124message GetChannels {}
125
126message GetChannelsResponse {
127    repeated Channel channels = 1;
128}
129
130message JoinChannel {
131    uint64 channel_id = 1;
132}
133
134message JoinChannelResponse {
135    repeated ChannelMessage messages = 1;
136    bool done = 2;
137}
138
139message LeaveChannel {
140    uint64 channel_id = 1;
141}
142
143message GetUsers {
144    repeated uint64 user_ids = 1;
145}
146
147message GetUsersResponse {
148    repeated User users = 1;
149}
150
151message SendChannelMessage {
152    uint64 channel_id = 1;
153    string body = 2;
154    Nonce nonce = 3;
155}
156
157message SendChannelMessageResponse {
158    ChannelMessage message = 1;
159}
160
161message ChannelMessageSent {
162    uint64 channel_id = 1;
163    ChannelMessage message = 2;
164}
165
166message GetChannelMessages {
167    uint64 channel_id = 1;
168    uint64 before_message_id = 2;
169}
170
171message GetChannelMessagesResponse {
172    repeated ChannelMessage messages = 1;
173    bool done = 2;
174}
175
176// Entities
177
178message Peer {
179    uint32 peer_id = 1;
180    uint32 replica_id = 2;
181}
182
183message User {
184    uint64 id = 1;
185    string github_login = 2;
186    string avatar_url = 3;
187}
188
189message Worktree {
190    string root_name = 1;
191    repeated Entry entries = 2;
192}
193
194message Entry {
195    uint64 id = 1;
196    bool is_dir = 2;
197    string path = 3;
198    uint64 inode = 4;
199    Timestamp mtime = 5;
200    bool is_symlink = 6;
201    bool is_ignored = 7;
202}
203
204message Buffer {
205    uint64 id = 1;
206    string content = 2;
207    repeated Operation.Edit history = 3;
208    repeated SelectionSetSnapshot selections = 4;
209}
210
211message SelectionSetSnapshot {
212    uint32 replica_id = 1;
213    uint32 local_timestamp = 2;
214    repeated Selection selections = 3;
215    bool is_active = 4;
216}
217
218message SelectionSet {
219    repeated Selection selections = 1;
220}
221
222message Selection {
223    uint64 id = 1;
224    Anchor start = 2;
225    Anchor end = 3;
226    bool reversed = 4;
227}
228
229message Anchor {
230    repeated VectorClockEntry version = 1;
231    uint64 offset = 2;
232    Bias bias = 3;
233    enum Bias {
234        LEFT = 0;
235        Right = 1;
236    }
237}
238
239message Operation {
240    oneof variant {
241        Edit edit = 1;
242        Undo undo = 2;
243        UpdateSelections update_selections = 3;
244        SetActiveSelections set_active_selections = 4;
245    }
246
247    message Edit {
248        uint32 replica_id = 1;
249        uint32 local_timestamp = 2;
250        uint32 lamport_timestamp = 3;
251        repeated VectorClockEntry version = 4;
252        repeated Range ranges = 5;
253        optional string new_text = 6;
254    }
255
256    message Undo {
257        uint32 replica_id = 1;
258        uint32 local_timestamp = 2;
259        uint32 lamport_timestamp = 3;
260        repeated Range ranges = 4;
261        repeated VectorClockEntry version = 5;
262        repeated UndoCount counts = 6;
263    }
264
265    message UndoCount {
266        uint32 replica_id = 1;
267        uint32 local_timestamp = 2;
268        uint32 count = 3;
269    }
270
271    message UpdateSelections {
272        uint32 replica_id = 1;
273        uint32 local_timestamp = 2;
274        uint32 lamport_timestamp = 3;
275        SelectionSet set = 4;
276    }
277
278    message SetActiveSelections {
279        uint32 replica_id = 1;
280        optional uint32 local_timestamp = 2;
281        uint32 lamport_timestamp = 3;
282    }
283}
284
285message VectorClockEntry {
286    uint32 replica_id = 1;
287    uint32 timestamp = 2;
288}
289
290message Timestamp {
291    uint64 seconds = 1;
292    uint32 nanos = 2;
293}
294
295message Range {
296    uint64 start = 1;
297    uint64 end = 2;
298}
299
300message Nonce {
301    uint64 upper_half = 1;
302    uint64 lower_half = 2;
303}
304
305message Channel {
306    uint64 id = 1;
307    string name = 2;
308}
309
310message ChannelMessage {
311    uint64 id = 1;
312    string body = 2;
313    uint64 timestamp = 3;
314    uint64 sender_id = 4;
315    Nonce nonce = 5;
316}