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        Auth auth = 4;
 10        AuthResponse auth_response = 5;
 11        ShareWorktree share_worktree = 6;
 12        ShareWorktreeResponse share_worktree_response = 7;
 13        OpenWorktree open_worktree = 8;
 14        OpenWorktreeResponse open_worktree_response = 9;
 15        UpdateWorktree update_worktree = 10;
 16        CloseWorktree close_worktree = 11;
 17        OpenBuffer open_buffer = 12;
 18        OpenBufferResponse open_buffer_response = 13;
 19        CloseBuffer close_buffer = 14;
 20        UpdateBuffer update_buffer = 15;
 21        SaveBuffer save_buffer = 16;
 22        BufferSaved buffer_saved = 17;
 23        AddPeer add_peer = 18;
 24        RemovePeer remove_peer = 19;
 25    }
 26}
 27
 28message Auth {
 29    int32 user_id = 1;
 30    string access_token = 2;
 31}
 32
 33message AuthResponse {
 34    bool credentials_valid = 1;
 35}
 36
 37message ShareWorktree {
 38    Worktree worktree = 1;
 39}
 40
 41message ShareWorktreeResponse {
 42    uint64 worktree_id = 1;
 43    string access_token = 2;
 44}
 45
 46message OpenWorktree {
 47    uint64 worktree_id = 1;
 48    string access_token = 2;
 49}
 50
 51message OpenWorktreeResponse {
 52    uint64 worktree_id = 1;
 53    Worktree worktree = 2;
 54    uint32 replica_id = 3;
 55    repeated Peer peers = 4;
 56}
 57
 58message UpdateWorktree {
 59    uint64 worktree_id = 1;
 60    repeated Entry updated_entries = 2;
 61    repeated uint64 removed_entries = 3;
 62}
 63
 64message CloseWorktree {
 65    uint64 worktree_id = 1;
 66}
 67
 68message AddPeer {
 69    uint64 worktree_id = 1;
 70    Peer peer = 2;
 71}
 72
 73message RemovePeer {
 74    uint64 worktree_id = 1;
 75    uint32 peer_id = 2;
 76}
 77
 78message Peer {
 79    uint32 peer_id = 1;
 80    uint32 replica_id = 2;
 81}
 82
 83message OpenBuffer {
 84    uint64 worktree_id = 1;
 85    string path = 2;
 86}
 87
 88message OpenBufferResponse {
 89    Buffer buffer = 1;
 90}
 91
 92message CloseBuffer {
 93    uint64 worktree_id = 1;
 94    uint64 buffer_id = 2;
 95}
 96
 97message UpdateBuffer {
 98    uint64 worktree_id = 1;
 99    uint64 buffer_id = 2;
100    repeated Operation operations = 3;
101}
102
103message SaveBuffer {
104    uint64 worktree_id = 1;
105    uint64 buffer_id = 2;
106}
107
108message BufferSaved {
109    uint64 worktree_id = 1;
110    uint64 buffer_id = 2;
111    repeated VectorClockEntry version = 3;
112    Timestamp mtime = 4;
113}
114
115message User {
116    uint64 id = 1;
117    string github_login = 2;
118    string avatar_url = 3;
119}
120
121message Worktree {
122    string root_name = 1;
123    repeated Entry entries = 2;
124}
125
126message Entry {
127    uint64 id = 1;
128    bool is_dir = 2;
129    string path = 3;
130    uint64 inode = 4;
131    Timestamp mtime = 5;
132    bool is_symlink = 6;
133    bool is_ignored = 7;
134}
135
136message Buffer {
137    uint64 id = 1;
138    string content = 2;
139    repeated Operation.Edit history = 3;
140    repeated SelectionSetSnapshot selections = 4;
141}
142
143message SelectionSetSnapshot {
144    uint32 replica_id = 1;
145    uint32 local_timestamp = 2;
146    repeated Selection selections = 3;
147    bool is_active = 4;
148}
149
150message SelectionSet {
151    repeated Selection selections = 1;
152}
153
154message Selection {
155    uint64 id = 1;
156    Anchor start = 2;
157    Anchor end = 3;
158    bool reversed = 4;
159}
160
161message Anchor {
162    repeated VectorClockEntry version = 1;
163    uint64 offset = 2;
164    Bias bias = 3;
165    enum Bias {
166        LEFT = 0;
167        Right = 1;
168    }
169}
170
171message Operation {
172    oneof variant {
173        Edit edit = 1;
174        Undo undo = 2;
175        UpdateSelections update_selections = 3;
176        SetActiveSelections set_active_selections = 4;
177    }
178
179    message Edit {
180        uint32 replica_id = 1;
181        uint32 local_timestamp = 2;
182        uint32 lamport_timestamp = 3;
183        repeated VectorClockEntry version = 4;
184        repeated Range ranges = 5;
185        optional string new_text = 6;
186    }
187
188    message Undo {
189        uint32 replica_id = 1;
190        uint32 local_timestamp = 2;
191        uint32 lamport_timestamp = 3;
192        repeated Range ranges = 4;
193        repeated VectorClockEntry version = 5;
194        repeated UndoCount counts = 6;
195    }
196
197    message UndoCount {
198        uint32 replica_id = 1;
199        uint32 local_timestamp = 2;
200        uint32 count = 3;
201    }
202
203    message UpdateSelections {
204        uint32 replica_id = 1;
205        uint32 local_timestamp = 2;
206        uint32 lamport_timestamp = 3;
207        SelectionSet set = 4;
208    }
209
210    message SetActiveSelections {
211        uint32 replica_id = 1;
212        optional uint32 local_timestamp = 2;
213        uint32 lamport_timestamp = 3;
214    }
215}
216
217message VectorClockEntry {
218    uint32 replica_id = 1;
219    uint32 timestamp = 2;
220}
221
222message Timestamp {
223    uint64 seconds = 1;
224    uint32 nanos = 2;
225}
226
227message Range {
228    uint64 start = 1;
229    uint64 end = 2;
230}