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