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}
155
156message SendChannelMessageResponse {
157    ChannelMessage message = 1;
158}
159
160message ChannelMessageSent {
161    uint64 channel_id = 1;
162    ChannelMessage message = 2;
163}
164
165message GetChannelMessages {
166    uint64 channel_id = 1;
167    uint64 before_message_id = 2;
168}
169
170message GetChannelMessagesResponse {
171    repeated ChannelMessage messages = 1;
172    bool done = 2;
173}
174
175// Entities
176
177message Peer {
178    uint32 peer_id = 1;
179    uint32 replica_id = 2;
180}
181
182message User {
183    uint64 id = 1;
184    string github_login = 2;
185    string avatar_url = 3;
186}
187
188message Worktree {
189    string root_name = 1;
190    repeated Entry entries = 2;
191}
192
193message Entry {
194    uint64 id = 1;
195    bool is_dir = 2;
196    string path = 3;
197    uint64 inode = 4;
198    Timestamp mtime = 5;
199    bool is_symlink = 6;
200    bool is_ignored = 7;
201}
202
203message Buffer {
204    uint64 id = 1;
205    string content = 2;
206    repeated Operation.Edit history = 3;
207    repeated SelectionSetSnapshot selections = 4;
208}
209
210message SelectionSetSnapshot {
211    uint32 replica_id = 1;
212    uint32 local_timestamp = 2;
213    repeated Selection selections = 3;
214    bool is_active = 4;
215}
216
217message SelectionSet {
218    repeated Selection selections = 1;
219}
220
221message Selection {
222    uint64 id = 1;
223    Anchor start = 2;
224    Anchor end = 3;
225    bool reversed = 4;
226}
227
228message Anchor {
229    repeated VectorClockEntry version = 1;
230    uint64 offset = 2;
231    Bias bias = 3;
232    enum Bias {
233        LEFT = 0;
234        Right = 1;
235    }
236}
237
238message Operation {
239    oneof variant {
240        Edit edit = 1;
241        Undo undo = 2;
242        UpdateSelections update_selections = 3;
243        SetActiveSelections set_active_selections = 4;
244    }
245
246    message Edit {
247        uint32 replica_id = 1;
248        uint32 local_timestamp = 2;
249        uint32 lamport_timestamp = 3;
250        repeated VectorClockEntry version = 4;
251        repeated Range ranges = 5;
252        optional string new_text = 6;
253    }
254
255    message Undo {
256        uint32 replica_id = 1;
257        uint32 local_timestamp = 2;
258        uint32 lamport_timestamp = 3;
259        repeated Range ranges = 4;
260        repeated VectorClockEntry version = 5;
261        repeated UndoCount counts = 6;
262    }
263
264    message UndoCount {
265        uint32 replica_id = 1;
266        uint32 local_timestamp = 2;
267        uint32 count = 3;
268    }
269
270    message UpdateSelections {
271        uint32 replica_id = 1;
272        uint32 local_timestamp = 2;
273        uint32 lamport_timestamp = 3;
274        SelectionSet set = 4;
275    }
276
277    message SetActiveSelections {
278        uint32 replica_id = 1;
279        optional uint32 local_timestamp = 2;
280        uint32 lamport_timestamp = 3;
281    }
282}
283
284message VectorClockEntry {
285    uint32 replica_id = 1;
286    uint32 timestamp = 2;
287}
288
289message Timestamp {
290    uint64 seconds = 1;
291    uint32 nanos = 2;
292}
293
294message Range {
295    uint64 start = 1;
296    uint64 end = 2;
297}
298
299message Channel {
300    uint64 id = 1;
301    string name = 2;
302}
303
304message ChannelMessage {
305    uint64 id = 1;
306    string body = 2;
307    uint64 timestamp = 3;
308    uint64 sender_id = 4;
309}