logiguard fork v3: full patch set on verified 8c74db0 tree
Includes prior-session patches (carry forward so the app compiles): - crates/gpui/build.rs: cross-compile manifest fix - crates/gpui/src/platform.rs: PlatformWindow::activate_with_token trait method - crates/gpui/src/window.rs: Window::activate_with_token public API - crates/gpui_linux/src/linux/wayland/window.rs: WaylandWindow::activate_with_token + activate() keyboard-serial fix Plus the focus-serial fix: - serial.rs: SerialKind::KeyboardEnter - client.rs: store wl_keyboard.enter serial; latest_serial_of() Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
27
crates/proto/Cargo.toml
Normal file
27
crates/proto/Cargo.toml
Normal file
@@ -0,0 +1,27 @@
|
||||
[package]
|
||||
description = "Shared protocol for communication between the Zed app and the zed.dev server"
|
||||
edition.workspace = true
|
||||
name = "proto"
|
||||
version = "0.1.0"
|
||||
publish.workspace = true
|
||||
license = "GPL-3.0-or-later"
|
||||
|
||||
[features]
|
||||
test-support = []
|
||||
|
||||
[lints]
|
||||
workspace = true
|
||||
|
||||
[lib]
|
||||
path = "src/proto.rs"
|
||||
doctest = false
|
||||
|
||||
[dependencies]
|
||||
anyhow.workspace = true
|
||||
prost.workspace = true
|
||||
serde.workspace = true
|
||||
|
||||
[build-dependencies]
|
||||
prost-build.workspace = true
|
||||
|
||||
[dev-dependencies]
|
||||
1
crates/proto/LICENSE-GPL
Symbolic link
1
crates/proto/LICENSE-GPL
Symbolic link
@@ -0,0 +1 @@
|
||||
../../LICENSE-GPL
|
||||
10
crates/proto/build.rs
Normal file
10
crates/proto/build.rs
Normal file
@@ -0,0 +1,10 @@
|
||||
fn main() {
|
||||
println!("cargo:rerun-if-changed=proto");
|
||||
let mut build = prost_build::Config::new();
|
||||
build
|
||||
.type_attribute(".", "#[derive(serde::Serialize, serde::Deserialize)]")
|
||||
.type_attribute("ProjectPath", "#[derive(Hash, Eq)]")
|
||||
.type_attribute("Anchor", "#[derive(Hash, Eq)]")
|
||||
.compile_protos(&["proto/zed.proto"], &["proto"])
|
||||
.unwrap();
|
||||
}
|
||||
87
crates/proto/proto/ai.proto
Normal file
87
crates/proto/proto/ai.proto
Normal file
@@ -0,0 +1,87 @@
|
||||
syntax = "proto3";
|
||||
package zed.messages;
|
||||
|
||||
import "task.proto";
|
||||
|
||||
message GetAgentServerCommand {
|
||||
uint64 project_id = 1;
|
||||
string name = 2;
|
||||
optional string root_dir = 3;
|
||||
}
|
||||
|
||||
message GetContextServerCommand {
|
||||
uint64 project_id = 1;
|
||||
string server_id = 2;
|
||||
optional string root_dir = 3;
|
||||
}
|
||||
|
||||
message ContextServerCommand {
|
||||
string path = 1;
|
||||
repeated string args = 2;
|
||||
map<string, string> env = 3;
|
||||
}
|
||||
|
||||
message AgentServerCommand {
|
||||
string path = 1;
|
||||
repeated string args = 2;
|
||||
map<string, string> env = 3;
|
||||
string root_dir = 4;
|
||||
|
||||
optional SpawnInTerminal login = 5;
|
||||
}
|
||||
|
||||
message ExternalAgentsUpdated {
|
||||
uint64 project_id = 1;
|
||||
repeated string names = 2;
|
||||
}
|
||||
|
||||
message ExternalExtensionAgentTarget {
|
||||
string archive = 1;
|
||||
string cmd = 2;
|
||||
repeated string args = 3;
|
||||
optional string sha256 = 4;
|
||||
map<string, string> env = 5;
|
||||
}
|
||||
|
||||
message ExternalExtensionAgent {
|
||||
string name = 1;
|
||||
optional string icon_path = 2;
|
||||
string extension_id = 3;
|
||||
map<string, ExternalExtensionAgentTarget> targets = 4;
|
||||
map<string, string> env = 5;
|
||||
optional string version = 6;
|
||||
}
|
||||
|
||||
message ExternalExtensionAgentsUpdated {
|
||||
uint64 project_id = 1;
|
||||
repeated ExternalExtensionAgent agents = 2;
|
||||
}
|
||||
|
||||
message ExternalAgentLoadingStatusUpdated {
|
||||
uint64 project_id = 1;
|
||||
string name = 2;
|
||||
reserved 3;
|
||||
}
|
||||
|
||||
message NewExternalAgentVersionAvailable {
|
||||
uint64 project_id = 1;
|
||||
string name = 2;
|
||||
string version = 3;
|
||||
}
|
||||
|
||||
message ShareAgentThread {
|
||||
string session_id = 1; // Client-generated UUID (acp::SessionId)
|
||||
string title = 2;
|
||||
bytes thread_data = 3;
|
||||
}
|
||||
|
||||
message GetSharedAgentThread {
|
||||
string session_id = 1; // UUID string
|
||||
}
|
||||
|
||||
message GetSharedAgentThreadResponse {
|
||||
string title = 1;
|
||||
bytes thread_data = 2;
|
||||
string sharer_username = 3;
|
||||
string created_at = 4;
|
||||
}
|
||||
92
crates/proto/proto/app.proto
Normal file
92
crates/proto/proto/app.proto
Normal file
@@ -0,0 +1,92 @@
|
||||
syntax = "proto3";
|
||||
package zed.messages;
|
||||
|
||||
message ShutdownRemoteServer {}
|
||||
|
||||
message Toast {
|
||||
uint64 project_id = 1;
|
||||
string notification_id = 2;
|
||||
string message = 3;
|
||||
}
|
||||
|
||||
message HideToast {
|
||||
uint64 project_id = 1;
|
||||
string notification_id = 2;
|
||||
}
|
||||
|
||||
message OpenServerSettings {
|
||||
uint64 project_id = 1;
|
||||
}
|
||||
|
||||
message GetCrashFiles {}
|
||||
|
||||
message GetCrashFilesResponse {
|
||||
repeated CrashReport crashes = 1;
|
||||
reserved 2; // old panics
|
||||
}
|
||||
|
||||
message CrashReport {
|
||||
reserved 1, 2;
|
||||
string metadata = 3;
|
||||
bytes minidump_contents = 4;
|
||||
}
|
||||
|
||||
message Extension {
|
||||
string id = 1;
|
||||
string version = 2;
|
||||
bool dev = 3;
|
||||
}
|
||||
|
||||
message SyncExtensions {
|
||||
repeated Extension extensions = 1;
|
||||
}
|
||||
|
||||
message SyncExtensionsResponse {
|
||||
string tmp_dir = 1;
|
||||
repeated Extension missing_extensions = 2;
|
||||
}
|
||||
|
||||
message InstallExtension {
|
||||
Extension extension = 1;
|
||||
string tmp_dir = 2;
|
||||
}
|
||||
|
||||
message AskPassRequest {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
uint64 askpass_id = 4;
|
||||
string prompt = 5;
|
||||
}
|
||||
|
||||
message AskPassResponse {
|
||||
string response = 1;
|
||||
}
|
||||
|
||||
message GetRemoteProfilingData {
|
||||
uint64 project_id = 1;
|
||||
bool foreground_only = 2;
|
||||
}
|
||||
|
||||
message GetRemoteProfilingDataResponse {
|
||||
repeated RemoteProfilingThread threads = 1;
|
||||
uint64 now_nanos = 2;
|
||||
}
|
||||
|
||||
message RemoteProfilingThread {
|
||||
optional string thread_name = 1;
|
||||
uint64 thread_id = 2;
|
||||
repeated RemoteProfilingTiming timings = 3;
|
||||
}
|
||||
|
||||
message RemoteProfilingTiming {
|
||||
RemoteProfilingLocation location = 1;
|
||||
uint64 start_nanos = 2;
|
||||
uint64 duration_nanos = 3;
|
||||
}
|
||||
|
||||
message RemoteProfilingLocation {
|
||||
string file = 1;
|
||||
uint32 line = 2;
|
||||
uint32 column = 3;
|
||||
}
|
||||
14
crates/proto/proto/buf.yaml
Normal file
14
crates/proto/proto/buf.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
version: v1
|
||||
breaking:
|
||||
use:
|
||||
- WIRE
|
||||
lint:
|
||||
except:
|
||||
# Since we use post_build instead of buf this doesn't matter
|
||||
- PACKAGE_DIRECTORY_MATCH
|
||||
# This is internal to Zed only so we don't enforce versions
|
||||
- PACKAGE_VERSION_SUFFIX
|
||||
# Style rules we don't enforce
|
||||
- ENUM_VALUE_PREFIX
|
||||
- ENUM_VALUE_UPPER_SNAKE_CASE
|
||||
- ENUM_ZERO_VALUE_SUFFIX
|
||||
339
crates/proto/proto/buffer.proto
Normal file
339
crates/proto/proto/buffer.proto
Normal file
@@ -0,0 +1,339 @@
|
||||
syntax = "proto3";
|
||||
package zed.messages;
|
||||
|
||||
import "core.proto";
|
||||
import "worktree.proto";
|
||||
|
||||
message OpenNewBuffer {
|
||||
uint64 project_id = 1;
|
||||
}
|
||||
|
||||
message OpenBufferResponse {
|
||||
uint64 buffer_id = 1;
|
||||
}
|
||||
|
||||
message CreateBufferForPeer {
|
||||
uint64 project_id = 1;
|
||||
PeerId peer_id = 2;
|
||||
oneof variant {
|
||||
BufferState state = 3;
|
||||
BufferChunk chunk = 4;
|
||||
}
|
||||
}
|
||||
|
||||
message UpdateBuffer {
|
||||
uint64 project_id = 1;
|
||||
uint64 buffer_id = 2;
|
||||
repeated Operation operations = 3;
|
||||
}
|
||||
|
||||
message OpenBufferByPath {
|
||||
uint64 project_id = 1;
|
||||
uint64 worktree_id = 2;
|
||||
string path = 3;
|
||||
}
|
||||
|
||||
message OpenBufferById {
|
||||
uint64 project_id = 1;
|
||||
uint64 id = 2;
|
||||
}
|
||||
|
||||
message UpdateBufferFile {
|
||||
uint64 project_id = 1;
|
||||
uint64 buffer_id = 2;
|
||||
File file = 3;
|
||||
}
|
||||
|
||||
message SaveBuffer {
|
||||
uint64 project_id = 1;
|
||||
uint64 buffer_id = 2;
|
||||
repeated VectorClockEntry version = 3;
|
||||
optional ProjectPath new_path = 4;
|
||||
}
|
||||
|
||||
message CloseBuffer {
|
||||
uint64 project_id = 1;
|
||||
uint64 buffer_id = 2;
|
||||
}
|
||||
|
||||
message BufferSaved {
|
||||
uint64 project_id = 1;
|
||||
uint64 buffer_id = 2;
|
||||
repeated VectorClockEntry version = 3;
|
||||
Timestamp mtime = 4;
|
||||
reserved 5;
|
||||
}
|
||||
|
||||
message BufferReloaded {
|
||||
uint64 project_id = 1;
|
||||
uint64 buffer_id = 2;
|
||||
repeated VectorClockEntry version = 3;
|
||||
Timestamp mtime = 4;
|
||||
reserved 5;
|
||||
LineEnding line_ending = 6;
|
||||
}
|
||||
|
||||
message ReloadBuffers {
|
||||
uint64 project_id = 1;
|
||||
repeated uint64 buffer_ids = 2;
|
||||
}
|
||||
|
||||
message ReloadBuffersResponse {
|
||||
ProjectTransaction transaction = 1;
|
||||
}
|
||||
|
||||
message SynchronizeBuffers {
|
||||
uint64 project_id = 1;
|
||||
repeated BufferVersion buffers = 2;
|
||||
}
|
||||
|
||||
message SynchronizeBuffersResponse {
|
||||
repeated BufferVersion buffers = 1;
|
||||
}
|
||||
|
||||
message BufferVersion {
|
||||
uint64 id = 1;
|
||||
repeated VectorClockEntry version = 2;
|
||||
}
|
||||
|
||||
message BufferState {
|
||||
uint64 id = 1;
|
||||
optional File file = 2;
|
||||
string base_text = 3;
|
||||
LineEnding line_ending = 5;
|
||||
repeated VectorClockEntry saved_version = 6;
|
||||
Timestamp saved_mtime = 8;
|
||||
|
||||
reserved 7;
|
||||
reserved 4;
|
||||
}
|
||||
|
||||
message BufferChunk {
|
||||
uint64 buffer_id = 1;
|
||||
repeated Operation operations = 2;
|
||||
bool is_last = 3;
|
||||
}
|
||||
|
||||
enum LineEnding {
|
||||
Unix = 0;
|
||||
Windows = 1;
|
||||
}
|
||||
|
||||
message VectorClockEntry {
|
||||
uint32 replica_id = 1;
|
||||
uint32 timestamp = 2;
|
||||
}
|
||||
|
||||
message UndoMapEntry {
|
||||
uint32 replica_id = 1;
|
||||
uint32 local_timestamp = 2;
|
||||
repeated UndoCount counts = 3;
|
||||
}
|
||||
|
||||
message UndoCount {
|
||||
uint32 replica_id = 1;
|
||||
uint32 lamport_timestamp = 2;
|
||||
uint32 count = 3;
|
||||
}
|
||||
|
||||
message Operation {
|
||||
oneof variant {
|
||||
Edit edit = 1;
|
||||
Undo undo = 2;
|
||||
UpdateSelections update_selections = 3;
|
||||
UpdateDiagnostics update_diagnostics = 4;
|
||||
UpdateCompletionTriggers update_completion_triggers = 5;
|
||||
UpdateLineEnding update_line_ending = 6;
|
||||
}
|
||||
|
||||
message Edit {
|
||||
uint32 replica_id = 1;
|
||||
uint32 lamport_timestamp = 2;
|
||||
repeated VectorClockEntry version = 3;
|
||||
repeated Range ranges = 4;
|
||||
repeated string new_text = 5;
|
||||
}
|
||||
|
||||
message Undo {
|
||||
uint32 replica_id = 1;
|
||||
uint32 lamport_timestamp = 2;
|
||||
repeated VectorClockEntry version = 3;
|
||||
repeated UndoCount counts = 4;
|
||||
}
|
||||
|
||||
message UpdateSelections {
|
||||
uint32 replica_id = 1;
|
||||
uint32 lamport_timestamp = 2;
|
||||
repeated Selection selections = 3;
|
||||
bool line_mode = 4;
|
||||
CursorShape cursor_shape = 5;
|
||||
}
|
||||
|
||||
message UpdateCompletionTriggers {
|
||||
uint32 replica_id = 1;
|
||||
uint32 lamport_timestamp = 2;
|
||||
repeated string triggers = 3;
|
||||
uint64 language_server_id = 4;
|
||||
}
|
||||
|
||||
message UpdateLineEnding {
|
||||
uint32 replica_id = 1;
|
||||
uint32 lamport_timestamp = 2;
|
||||
LineEnding line_ending = 3;
|
||||
}
|
||||
}
|
||||
|
||||
message ProjectTransaction {
|
||||
repeated uint64 buffer_ids = 1;
|
||||
repeated Transaction transactions = 2;
|
||||
}
|
||||
|
||||
message Transaction {
|
||||
LamportTimestamp id = 1;
|
||||
repeated LamportTimestamp edit_ids = 2;
|
||||
repeated VectorClockEntry start = 3;
|
||||
}
|
||||
|
||||
message LamportTimestamp {
|
||||
uint32 replica_id = 1;
|
||||
uint32 value = 2;
|
||||
}
|
||||
|
||||
message Range {
|
||||
uint64 start = 1;
|
||||
uint64 end = 2;
|
||||
}
|
||||
|
||||
message Selection {
|
||||
uint64 id = 1;
|
||||
EditorAnchor start = 2;
|
||||
EditorAnchor end = 3;
|
||||
bool reversed = 4;
|
||||
}
|
||||
|
||||
message EditorAnchor {
|
||||
optional uint64 excerpt_id = 1;
|
||||
Anchor anchor = 2;
|
||||
}
|
||||
|
||||
message PathKey {
|
||||
optional uint64 sort_prefix = 1;
|
||||
string path = 2;
|
||||
}
|
||||
|
||||
enum CursorShape {
|
||||
CursorBar = 0;
|
||||
CursorBlock = 1;
|
||||
CursorUnderscore = 2;
|
||||
CursorHollow = 3;
|
||||
}
|
||||
|
||||
message UpdateDiagnostics {
|
||||
uint32 replica_id = 1;
|
||||
uint32 lamport_timestamp = 2;
|
||||
uint64 server_id = 3;
|
||||
repeated Diagnostic diagnostics = 4;
|
||||
}
|
||||
|
||||
message Anchor {
|
||||
uint32 replica_id = 1;
|
||||
uint32 timestamp = 2;
|
||||
uint64 offset = 3;
|
||||
Bias bias = 4;
|
||||
optional uint64 buffer_id = 5;
|
||||
}
|
||||
|
||||
message AnchorRange {
|
||||
Anchor start = 1;
|
||||
Anchor end = 2;
|
||||
}
|
||||
|
||||
message Location {
|
||||
uint64 buffer_id = 1;
|
||||
Anchor start = 2;
|
||||
Anchor end = 3;
|
||||
}
|
||||
|
||||
enum Bias {
|
||||
Left = 0;
|
||||
Right = 1;
|
||||
}
|
||||
|
||||
message Diagnostic {
|
||||
Anchor start = 1;
|
||||
Anchor end = 2;
|
||||
optional string source = 3;
|
||||
optional string registration_id = 17;
|
||||
|
||||
enum SourceKind {
|
||||
Pulled = 0;
|
||||
Pushed = 1;
|
||||
Other = 2;
|
||||
}
|
||||
|
||||
SourceKind source_kind = 16;
|
||||
Severity severity = 4;
|
||||
string message = 5;
|
||||
optional string code = 6;
|
||||
uint64 group_id = 7;
|
||||
bool is_primary = 8;
|
||||
|
||||
reserved 9;
|
||||
|
||||
bool is_disk_based = 10;
|
||||
bool is_unnecessary = 11;
|
||||
bool underline = 15;
|
||||
|
||||
enum Severity {
|
||||
None = 0;
|
||||
Error = 1;
|
||||
Warning = 2;
|
||||
Information = 3;
|
||||
Hint = 4;
|
||||
}
|
||||
optional string data = 12;
|
||||
optional string code_description = 13;
|
||||
optional string markdown = 14;
|
||||
}
|
||||
|
||||
message SearchQuery {
|
||||
string query = 2;
|
||||
bool regex = 3;
|
||||
bool whole_word = 4;
|
||||
bool case_sensitive = 5;
|
||||
repeated string files_to_include = 10;
|
||||
repeated string files_to_exclude = 11;
|
||||
bool match_full_paths = 9;
|
||||
bool include_ignored = 8;
|
||||
string files_to_include_legacy = 6;
|
||||
string files_to_exclude_legacy = 7;
|
||||
}
|
||||
|
||||
message FindSearchCandidates {
|
||||
uint64 project_id = 1;
|
||||
SearchQuery query = 2;
|
||||
uint64 limit = 3;
|
||||
uint64 handle = 4;
|
||||
}
|
||||
|
||||
message FindSearchCandidatesDone {}
|
||||
|
||||
message FindSearchCandidatesMatches {
|
||||
repeated uint64 buffer_ids = 1;
|
||||
}
|
||||
|
||||
message FindSearchCandidatesChunk {
|
||||
uint64 project_id = 1;
|
||||
PeerId peer_id = 2;
|
||||
uint64 handle = 3;
|
||||
|
||||
oneof variant {
|
||||
FindSearchCandidatesMatches matches = 4;
|
||||
FindSearchCandidatesDone done = 5;
|
||||
}
|
||||
}
|
||||
|
||||
message FindSearchCandidatesCancelled {
|
||||
uint64 project_id = 1;
|
||||
uint64 handle = 2;
|
||||
}
|
||||
440
crates/proto/proto/call.proto
Normal file
440
crates/proto/proto/call.proto
Normal file
@@ -0,0 +1,440 @@
|
||||
syntax = "proto3";
|
||||
package zed.messages;
|
||||
|
||||
import "buffer.proto";
|
||||
import "channel.proto";
|
||||
import "core.proto";
|
||||
import "git.proto";
|
||||
import "lsp.proto";
|
||||
import "worktree.proto";
|
||||
|
||||
message CreateRoom {}
|
||||
|
||||
message CreateRoomResponse {
|
||||
Room room = 1;
|
||||
optional LiveKitConnectionInfo live_kit_connection_info = 2;
|
||||
}
|
||||
|
||||
message JoinRoom {
|
||||
uint64 id = 1;
|
||||
}
|
||||
|
||||
message JoinRoomResponse {
|
||||
Room room = 1;
|
||||
optional uint64 channel_id = 2;
|
||||
optional LiveKitConnectionInfo live_kit_connection_info = 3;
|
||||
}
|
||||
|
||||
message RejoinRoom {
|
||||
uint64 id = 1;
|
||||
repeated UpdateProject reshared_projects = 2;
|
||||
repeated RejoinProject rejoined_projects = 3;
|
||||
}
|
||||
|
||||
message RejoinRemoteProjects {
|
||||
repeated RejoinProject rejoined_projects = 1;
|
||||
}
|
||||
|
||||
message RejoinRemoteProjectsResponse {
|
||||
repeated RejoinedProject rejoined_projects = 1;
|
||||
}
|
||||
|
||||
message RejoinProject {
|
||||
uint64 id = 1;
|
||||
repeated RejoinWorktree worktrees = 2;
|
||||
repeated RejoinRepository repositories = 3;
|
||||
}
|
||||
|
||||
message RejoinWorktree {
|
||||
uint64 id = 1;
|
||||
uint64 scan_id = 2;
|
||||
}
|
||||
|
||||
message RejoinRepository {
|
||||
uint64 id = 1;
|
||||
uint64 scan_id = 2;
|
||||
}
|
||||
|
||||
message RejoinRoomResponse {
|
||||
Room room = 1;
|
||||
repeated ResharedProject reshared_projects = 2;
|
||||
repeated RejoinedProject rejoined_projects = 3;
|
||||
}
|
||||
|
||||
message ResharedProject {
|
||||
uint64 id = 1;
|
||||
repeated Collaborator collaborators = 2;
|
||||
}
|
||||
|
||||
message RejoinedProject {
|
||||
uint64 id = 1;
|
||||
repeated WorktreeMetadata worktrees = 2;
|
||||
repeated Collaborator collaborators = 3;
|
||||
repeated LanguageServer language_servers = 4;
|
||||
repeated string language_server_capabilities = 5;
|
||||
}
|
||||
|
||||
message LeaveRoom {}
|
||||
|
||||
message Room {
|
||||
uint64 id = 1;
|
||||
repeated Participant participants = 2;
|
||||
repeated PendingParticipant pending_participants = 3;
|
||||
repeated Follower followers = 4;
|
||||
string livekit_room = 5;
|
||||
}
|
||||
|
||||
message Participant {
|
||||
uint64 user_id = 1;
|
||||
PeerId peer_id = 2;
|
||||
repeated ParticipantProject projects = 3;
|
||||
ParticipantLocation location = 4;
|
||||
uint32 participant_index = 5;
|
||||
ChannelRole role = 6;
|
||||
reserved 7;
|
||||
}
|
||||
|
||||
message PendingParticipant {
|
||||
uint64 user_id = 1;
|
||||
uint64 calling_user_id = 2;
|
||||
optional uint64 initial_project_id = 3;
|
||||
}
|
||||
|
||||
message ParticipantProject {
|
||||
uint64 id = 1;
|
||||
repeated string worktree_root_names = 2;
|
||||
}
|
||||
|
||||
message Follower {
|
||||
PeerId leader_id = 1;
|
||||
PeerId follower_id = 2;
|
||||
uint64 project_id = 3;
|
||||
}
|
||||
|
||||
message ParticipantLocation {
|
||||
oneof variant {
|
||||
SharedProject shared_project = 1;
|
||||
UnsharedProject unshared_project = 2;
|
||||
External external = 3;
|
||||
}
|
||||
|
||||
message SharedProject {
|
||||
uint64 id = 1;
|
||||
}
|
||||
|
||||
message UnsharedProject {}
|
||||
|
||||
message External {}
|
||||
}
|
||||
|
||||
message Call {
|
||||
uint64 room_id = 1;
|
||||
uint64 called_user_id = 2;
|
||||
optional uint64 initial_project_id = 3;
|
||||
}
|
||||
|
||||
message IncomingCall {
|
||||
uint64 room_id = 1;
|
||||
uint64 calling_user_id = 2;
|
||||
repeated uint64 participant_user_ids = 3;
|
||||
optional ParticipantProject initial_project = 4;
|
||||
}
|
||||
|
||||
message CallCanceled {
|
||||
uint64 room_id = 1;
|
||||
}
|
||||
|
||||
message CancelCall {
|
||||
uint64 room_id = 1;
|
||||
uint64 called_user_id = 2;
|
||||
}
|
||||
|
||||
message DeclineCall {
|
||||
uint64 room_id = 1;
|
||||
}
|
||||
|
||||
message UpdateParticipantLocation {
|
||||
uint64 room_id = 1;
|
||||
ParticipantLocation location = 2;
|
||||
}
|
||||
|
||||
message RoomUpdated {
|
||||
Room room = 1;
|
||||
}
|
||||
|
||||
message LiveKitConnectionInfo {
|
||||
string server_url = 1;
|
||||
string token = 2;
|
||||
bool can_publish = 3;
|
||||
}
|
||||
|
||||
message ShareProject {
|
||||
uint64 room_id = 1;
|
||||
repeated WorktreeMetadata worktrees = 2;
|
||||
reserved 3;
|
||||
bool is_ssh_project = 4;
|
||||
optional bool windows_paths = 5;
|
||||
repeated string features = 6;
|
||||
}
|
||||
|
||||
message ShareProjectResponse {
|
||||
uint64 project_id = 1;
|
||||
}
|
||||
|
||||
message UnshareProject {
|
||||
uint64 project_id = 1;
|
||||
}
|
||||
|
||||
message UpdateProject {
|
||||
uint64 project_id = 1;
|
||||
repeated WorktreeMetadata worktrees = 2;
|
||||
}
|
||||
|
||||
message JoinProject {
|
||||
uint64 project_id = 1;
|
||||
optional string committer_email = 2;
|
||||
optional string committer_name = 3;
|
||||
repeated string features = 4;
|
||||
}
|
||||
|
||||
message JoinProjectResponse {
|
||||
uint64 project_id = 5;
|
||||
uint32 replica_id = 1;
|
||||
repeated WorktreeMetadata worktrees = 2;
|
||||
repeated Collaborator collaborators = 3;
|
||||
repeated LanguageServer language_servers = 4;
|
||||
repeated string language_server_capabilities = 8;
|
||||
ChannelRole role = 6;
|
||||
bool windows_paths = 9;
|
||||
repeated string features = 10;
|
||||
reserved 7;
|
||||
}
|
||||
|
||||
message LeaveProject {
|
||||
uint64 project_id = 1;
|
||||
}
|
||||
|
||||
message UpdateWorktree {
|
||||
uint64 project_id = 1;
|
||||
uint64 worktree_id = 2;
|
||||
string root_name = 3;
|
||||
repeated Entry updated_entries = 4;
|
||||
repeated uint64 removed_entries = 5;
|
||||
repeated RepositoryEntry updated_repositories = 6; // deprecated
|
||||
repeated uint64 removed_repositories = 7; // deprecated
|
||||
uint64 scan_id = 8;
|
||||
bool is_last_update = 9;
|
||||
string abs_path = 10;
|
||||
optional string root_repo_common_dir = 11;
|
||||
}
|
||||
|
||||
// deprecated
|
||||
message RepositoryEntry {
|
||||
uint64 repository_id = 1;
|
||||
reserved 2;
|
||||
repeated StatusEntry updated_statuses = 3;
|
||||
repeated string removed_statuses = 4;
|
||||
repeated string current_merge_conflicts = 5;
|
||||
optional Branch branch_summary = 6;
|
||||
}
|
||||
|
||||
message AddProjectCollaborator {
|
||||
uint64 project_id = 1;
|
||||
Collaborator collaborator = 2;
|
||||
}
|
||||
|
||||
message UpdateProjectCollaborator {
|
||||
uint64 project_id = 1;
|
||||
PeerId old_peer_id = 2;
|
||||
PeerId new_peer_id = 3;
|
||||
}
|
||||
|
||||
message RemoveProjectCollaborator {
|
||||
uint64 project_id = 1;
|
||||
PeerId peer_id = 2;
|
||||
}
|
||||
|
||||
message GetUsers {
|
||||
repeated uint64 user_ids = 1;
|
||||
}
|
||||
|
||||
message FuzzySearchUsers {
|
||||
string query = 1;
|
||||
}
|
||||
|
||||
message UsersResponse {
|
||||
repeated User users = 1;
|
||||
}
|
||||
|
||||
message RequestContact {
|
||||
uint64 responder_id = 1;
|
||||
}
|
||||
|
||||
message RemoveContact {
|
||||
uint64 user_id = 1;
|
||||
}
|
||||
|
||||
message RespondToContactRequest {
|
||||
uint64 requester_id = 1;
|
||||
ContactRequestResponse response = 2;
|
||||
}
|
||||
|
||||
enum ContactRequestResponse {
|
||||
Accept = 0;
|
||||
Decline = 1;
|
||||
Block = 2;
|
||||
Dismiss = 3;
|
||||
}
|
||||
|
||||
message UpdateContacts {
|
||||
repeated Contact contacts = 1;
|
||||
repeated uint64 remove_contacts = 2;
|
||||
repeated IncomingContactRequest incoming_requests = 3;
|
||||
repeated uint64 remove_incoming_requests = 4;
|
||||
repeated uint64 outgoing_requests = 5;
|
||||
repeated uint64 remove_outgoing_requests = 6;
|
||||
}
|
||||
|
||||
message ShowContacts {}
|
||||
|
||||
message IncomingContactRequest {
|
||||
uint64 requester_id = 1;
|
||||
}
|
||||
|
||||
message Follow {
|
||||
uint64 room_id = 1;
|
||||
optional uint64 project_id = 2;
|
||||
PeerId leader_id = 3;
|
||||
}
|
||||
|
||||
message FollowResponse {
|
||||
View active_view = 3;
|
||||
reserved 1;
|
||||
repeated View views = 2;
|
||||
}
|
||||
|
||||
message UpdateFollowers {
|
||||
uint64 room_id = 1;
|
||||
optional uint64 project_id = 2;
|
||||
reserved 3;
|
||||
oneof variant {
|
||||
View create_view = 5;
|
||||
UpdateActiveView update_active_view = 4;
|
||||
UpdateView update_view = 6;
|
||||
}
|
||||
}
|
||||
|
||||
message Unfollow {
|
||||
uint64 room_id = 1;
|
||||
optional uint64 project_id = 2;
|
||||
PeerId leader_id = 3;
|
||||
}
|
||||
|
||||
message ViewId {
|
||||
PeerId creator = 1;
|
||||
uint64 id = 2;
|
||||
}
|
||||
|
||||
message UpdateActiveView {
|
||||
reserved 1, 2;
|
||||
View view = 3;
|
||||
}
|
||||
|
||||
enum PanelId {
|
||||
AssistantPanel = 0;
|
||||
DebugPanel = 1;
|
||||
}
|
||||
|
||||
message UpdateView {
|
||||
ViewId id = 1;
|
||||
optional PeerId leader_id = 2;
|
||||
|
||||
oneof variant {
|
||||
Editor editor = 3;
|
||||
}
|
||||
|
||||
message Editor {
|
||||
repeated ExcerptInsertion inserted_excerpts = 1;
|
||||
repeated uint64 deleted_excerpts = 2;
|
||||
repeated Selection selections = 3;
|
||||
optional Selection pending_selection = 4;
|
||||
EditorAnchor scroll_top_anchor = 5;
|
||||
reserved 6;
|
||||
reserved 7;
|
||||
double scroll_x = 8;
|
||||
double scroll_y = 9;
|
||||
repeated PathExcerpts updated_paths = 10;
|
||||
repeated uint64 deleted_buffers = 11;
|
||||
}
|
||||
}
|
||||
|
||||
message View {
|
||||
ViewId id = 1;
|
||||
optional PeerId leader_id = 2;
|
||||
optional PanelId panel_id = 6;
|
||||
|
||||
oneof variant {
|
||||
Editor editor = 3;
|
||||
ChannelView channel_view = 4;
|
||||
}
|
||||
|
||||
reserved 5;
|
||||
|
||||
message Editor {
|
||||
bool singleton = 1;
|
||||
optional string title = 2;
|
||||
repeated Excerpt excerpts = 3;
|
||||
repeated Selection selections = 4;
|
||||
optional Selection pending_selection = 5;
|
||||
EditorAnchor scroll_top_anchor = 6;
|
||||
reserved 7;
|
||||
reserved 8;
|
||||
double scroll_x = 9;
|
||||
double scroll_y = 10;
|
||||
repeated PathExcerpts path_excerpts = 11;
|
||||
}
|
||||
|
||||
message ChannelView {
|
||||
uint64 channel_id = 1;
|
||||
Editor editor = 2;
|
||||
}
|
||||
}
|
||||
|
||||
message ExcerptInsertion {
|
||||
Excerpt excerpt = 1;
|
||||
optional uint64 previous_excerpt_id = 2;
|
||||
}
|
||||
|
||||
message Excerpt {
|
||||
uint64 id = 1;
|
||||
uint64 buffer_id = 2;
|
||||
Anchor context_start = 3;
|
||||
Anchor context_end = 4;
|
||||
Anchor primary_start = 5;
|
||||
Anchor primary_end = 6;
|
||||
}
|
||||
|
||||
message ExcerptRange {
|
||||
Anchor context_start = 1;
|
||||
Anchor context_end = 2;
|
||||
Anchor primary_start = 3;
|
||||
Anchor primary_end = 4;
|
||||
}
|
||||
|
||||
message PathExcerpts {
|
||||
PathKey path_key = 1;
|
||||
uint64 buffer_id = 2;
|
||||
repeated ExcerptRange ranges = 3;
|
||||
}
|
||||
|
||||
message Contact {
|
||||
uint64 user_id = 1;
|
||||
bool online = 2;
|
||||
bool busy = 3;
|
||||
}
|
||||
|
||||
message SetRoomParticipantRole {
|
||||
uint64 room_id = 1;
|
||||
uint64 user_id = 2;
|
||||
ChannelRole role = 3;
|
||||
}
|
||||
294
crates/proto/proto/channel.proto
Normal file
294
crates/proto/proto/channel.proto
Normal file
@@ -0,0 +1,294 @@
|
||||
syntax = "proto3";
|
||||
package zed.messages;
|
||||
|
||||
import "buffer.proto";
|
||||
import "core.proto";
|
||||
|
||||
message Channel {
|
||||
uint64 id = 1;
|
||||
string name = 2;
|
||||
ChannelVisibility visibility = 3;
|
||||
int32 channel_order = 4;
|
||||
repeated uint64 parent_path = 5;
|
||||
}
|
||||
|
||||
enum ChannelVisibility {
|
||||
Public = 0;
|
||||
Members = 1;
|
||||
}
|
||||
|
||||
message UpdateChannels {
|
||||
repeated Channel channels = 1;
|
||||
repeated uint64 delete_channels = 4;
|
||||
repeated Channel channel_invitations = 5;
|
||||
repeated uint64 remove_channel_invitations = 6;
|
||||
repeated ChannelParticipants channel_participants = 7;
|
||||
repeated ChannelBufferVersion latest_channel_buffer_versions = 9;
|
||||
|
||||
reserved 8;
|
||||
reserved 10 to 15;
|
||||
}
|
||||
|
||||
message UpdateUserChannels {
|
||||
repeated ChannelBufferVersion observed_channel_buffer_version = 2;
|
||||
repeated ChannelMembership channel_memberships = 3;
|
||||
|
||||
reserved 1;
|
||||
}
|
||||
|
||||
message ChannelMembership {
|
||||
uint64 channel_id = 1;
|
||||
ChannelRole role = 2;
|
||||
}
|
||||
|
||||
message ChannelMessageId {
|
||||
uint64 channel_id = 1;
|
||||
uint64 message_id = 2;
|
||||
}
|
||||
|
||||
message ChannelPermission {
|
||||
uint64 channel_id = 1;
|
||||
ChannelRole role = 3;
|
||||
}
|
||||
|
||||
message ChannelParticipants {
|
||||
uint64 channel_id = 1;
|
||||
repeated uint64 participant_user_ids = 2;
|
||||
}
|
||||
|
||||
message JoinChannel {
|
||||
uint64 channel_id = 1;
|
||||
}
|
||||
|
||||
message DeleteChannel {
|
||||
uint64 channel_id = 1;
|
||||
}
|
||||
|
||||
message GetChannelMembers {
|
||||
uint64 channel_id = 1;
|
||||
string query = 2;
|
||||
uint64 limit = 3;
|
||||
}
|
||||
|
||||
message GetChannelMembersResponse {
|
||||
repeated ChannelMember members = 1;
|
||||
repeated User users = 2;
|
||||
}
|
||||
|
||||
message ChannelMember {
|
||||
uint64 user_id = 1;
|
||||
Kind kind = 3;
|
||||
ChannelRole role = 4;
|
||||
|
||||
enum Kind {
|
||||
Member = 0;
|
||||
Invitee = 1;
|
||||
}
|
||||
}
|
||||
|
||||
message SubscribeToChannels {}
|
||||
|
||||
message CreateChannel {
|
||||
string name = 1;
|
||||
optional uint64 parent_id = 2;
|
||||
}
|
||||
|
||||
message CreateChannelResponse {
|
||||
Channel channel = 1;
|
||||
optional uint64 parent_id = 2;
|
||||
}
|
||||
|
||||
message InviteChannelMember {
|
||||
uint64 channel_id = 1;
|
||||
uint64 user_id = 2;
|
||||
ChannelRole role = 4;
|
||||
}
|
||||
|
||||
message RemoveChannelMember {
|
||||
uint64 channel_id = 1;
|
||||
uint64 user_id = 2;
|
||||
}
|
||||
|
||||
enum ChannelRole {
|
||||
Admin = 0;
|
||||
Member = 1;
|
||||
Guest = 2;
|
||||
Banned = 3;
|
||||
Talker = 4;
|
||||
}
|
||||
|
||||
message SetChannelMemberRole {
|
||||
uint64 channel_id = 1;
|
||||
uint64 user_id = 2;
|
||||
ChannelRole role = 3;
|
||||
}
|
||||
|
||||
message SetChannelVisibility {
|
||||
uint64 channel_id = 1;
|
||||
ChannelVisibility visibility = 2;
|
||||
}
|
||||
|
||||
message RenameChannel {
|
||||
uint64 channel_id = 1;
|
||||
string name = 2;
|
||||
}
|
||||
|
||||
message RenameChannelResponse {
|
||||
Channel channel = 1;
|
||||
}
|
||||
|
||||
message JoinChannelChat {
|
||||
uint64 channel_id = 1;
|
||||
}
|
||||
|
||||
message JoinChannelChatResponse {
|
||||
repeated ChannelMessage messages = 1;
|
||||
bool done = 2;
|
||||
}
|
||||
|
||||
message LeaveChannelChat {
|
||||
uint64 channel_id = 1;
|
||||
}
|
||||
|
||||
message SendChannelMessage {
|
||||
uint64 channel_id = 1;
|
||||
string body = 2;
|
||||
Nonce nonce = 3;
|
||||
repeated ChatMention mentions = 4;
|
||||
optional uint64 reply_to_message_id = 5;
|
||||
}
|
||||
|
||||
message RemoveChannelMessage {
|
||||
uint64 channel_id = 1;
|
||||
uint64 message_id = 2;
|
||||
}
|
||||
|
||||
message UpdateChannelMessage {
|
||||
uint64 channel_id = 1;
|
||||
uint64 message_id = 2;
|
||||
Nonce nonce = 4;
|
||||
string body = 5;
|
||||
repeated ChatMention mentions = 6;
|
||||
}
|
||||
|
||||
message AckChannelMessage {
|
||||
uint64 channel_id = 1;
|
||||
uint64 message_id = 2;
|
||||
}
|
||||
|
||||
message SendChannelMessageResponse {
|
||||
ChannelMessage message = 1;
|
||||
}
|
||||
|
||||
message ChannelMessageSent {
|
||||
uint64 channel_id = 1;
|
||||
ChannelMessage message = 2;
|
||||
}
|
||||
|
||||
message ChannelMessageUpdate {
|
||||
uint64 channel_id = 1;
|
||||
ChannelMessage message = 2;
|
||||
}
|
||||
|
||||
message GetChannelMessages {
|
||||
uint64 channel_id = 1;
|
||||
uint64 before_message_id = 2;
|
||||
}
|
||||
|
||||
message GetChannelMessagesResponse {
|
||||
repeated ChannelMessage messages = 1;
|
||||
bool done = 2;
|
||||
}
|
||||
|
||||
message GetChannelMessagesById {
|
||||
repeated uint64 message_ids = 1;
|
||||
}
|
||||
|
||||
message MoveChannel {
|
||||
uint64 channel_id = 1;
|
||||
uint64 to = 2;
|
||||
}
|
||||
|
||||
message ReorderChannel {
|
||||
uint64 channel_id = 1;
|
||||
enum Direction {
|
||||
Up = 0;
|
||||
Down = 1;
|
||||
}
|
||||
Direction direction = 2;
|
||||
}
|
||||
|
||||
message JoinChannelBuffer {
|
||||
uint64 channel_id = 1;
|
||||
}
|
||||
|
||||
message ChannelBufferVersion {
|
||||
uint64 channel_id = 1;
|
||||
repeated VectorClockEntry version = 2;
|
||||
uint64 epoch = 3;
|
||||
}
|
||||
|
||||
message UpdateChannelBufferCollaborators {
|
||||
uint64 channel_id = 1;
|
||||
repeated Collaborator collaborators = 2;
|
||||
}
|
||||
|
||||
message UpdateChannelBuffer {
|
||||
uint64 channel_id = 1;
|
||||
repeated Operation operations = 2;
|
||||
}
|
||||
|
||||
message ChannelMessage {
|
||||
uint64 id = 1;
|
||||
string body = 2;
|
||||
uint64 timestamp = 3;
|
||||
uint64 sender_id = 4;
|
||||
Nonce nonce = 5;
|
||||
repeated ChatMention mentions = 6;
|
||||
optional uint64 reply_to_message_id = 7;
|
||||
optional uint64 edited_at = 8;
|
||||
}
|
||||
|
||||
message ChatMention {
|
||||
Range range = 1;
|
||||
uint64 user_id = 2;
|
||||
}
|
||||
|
||||
message RejoinChannelBuffers {
|
||||
repeated ChannelBufferVersion buffers = 1;
|
||||
}
|
||||
|
||||
message RejoinChannelBuffersResponse {
|
||||
repeated RejoinedChannelBuffer buffers = 1;
|
||||
}
|
||||
|
||||
message AckBufferOperation {
|
||||
uint64 buffer_id = 1;
|
||||
uint64 epoch = 2;
|
||||
repeated VectorClockEntry version = 3;
|
||||
}
|
||||
|
||||
message JoinChannelBufferResponse {
|
||||
uint64 buffer_id = 1;
|
||||
uint32 replica_id = 2;
|
||||
string base_text = 3;
|
||||
repeated Operation operations = 4;
|
||||
repeated Collaborator collaborators = 5;
|
||||
uint64 epoch = 6;
|
||||
}
|
||||
|
||||
message RejoinedChannelBuffer {
|
||||
uint64 channel_id = 1;
|
||||
repeated VectorClockEntry version = 2;
|
||||
repeated Operation operations = 3;
|
||||
repeated Collaborator collaborators = 4;
|
||||
}
|
||||
|
||||
message LeaveChannelBuffer {
|
||||
uint64 channel_id = 1;
|
||||
}
|
||||
|
||||
message RespondToChannelInvite {
|
||||
uint64 channel_id = 1;
|
||||
bool accept = 2;
|
||||
}
|
||||
29
crates/proto/proto/core.proto
Normal file
29
crates/proto/proto/core.proto
Normal file
@@ -0,0 +1,29 @@
|
||||
syntax = "proto3";
|
||||
package zed.messages;
|
||||
|
||||
message PeerId {
|
||||
uint32 owner_id = 1;
|
||||
uint32 id = 2;
|
||||
}
|
||||
|
||||
message User {
|
||||
reserved 4;
|
||||
uint64 id = 1;
|
||||
string github_login = 2;
|
||||
string avatar_url = 3;
|
||||
optional string name = 5;
|
||||
}
|
||||
|
||||
message Nonce {
|
||||
uint64 upper_half = 1;
|
||||
uint64 lower_half = 2;
|
||||
}
|
||||
|
||||
message Collaborator {
|
||||
PeerId peer_id = 1;
|
||||
uint32 replica_id = 2;
|
||||
uint64 user_id = 3;
|
||||
bool is_host = 4;
|
||||
optional string committer_name = 5;
|
||||
optional string committer_email = 6;
|
||||
}
|
||||
553
crates/proto/proto/debugger.proto
Normal file
553
crates/proto/proto/debugger.proto
Normal file
@@ -0,0 +1,553 @@
|
||||
syntax = "proto3";
|
||||
package zed.messages;
|
||||
|
||||
import "buffer.proto";
|
||||
import "task.proto";
|
||||
|
||||
enum BreakpointState {
|
||||
Enabled = 0;
|
||||
Disabled = 1;
|
||||
}
|
||||
|
||||
message Breakpoint {
|
||||
Anchor position = 1;
|
||||
BreakpointState state = 2;
|
||||
reserved 3;
|
||||
optional string message = 4;
|
||||
optional string condition = 5;
|
||||
optional string hit_condition = 6;
|
||||
map<uint64, BreakpointSessionState> session_state = 7;
|
||||
}
|
||||
|
||||
message BreakpointSessionState {
|
||||
uint64 id = 1;
|
||||
bool verified = 2;
|
||||
}
|
||||
|
||||
message BreakpointsForFile {
|
||||
uint64 project_id = 1;
|
||||
string path = 2;
|
||||
repeated Breakpoint breakpoints = 3;
|
||||
}
|
||||
|
||||
message ToggleBreakpoint {
|
||||
uint64 project_id = 1;
|
||||
string path = 2;
|
||||
Breakpoint breakpoint = 3;
|
||||
}
|
||||
|
||||
enum DapThreadStatus {
|
||||
Running = 0;
|
||||
Stopped = 1;
|
||||
Exited = 2;
|
||||
Ended = 3;
|
||||
}
|
||||
|
||||
enum VariablesArgumentsFilter {
|
||||
Indexed = 0;
|
||||
Named = 1;
|
||||
}
|
||||
|
||||
message ValueFormat {
|
||||
optional bool hex = 1;
|
||||
}
|
||||
|
||||
message VariablesRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
uint64 variables_reference = 3;
|
||||
optional VariablesArgumentsFilter filter = 4;
|
||||
optional uint64 start = 5;
|
||||
optional uint64 count = 6;
|
||||
optional ValueFormat format = 7;
|
||||
}
|
||||
|
||||
enum SteppingGranularity {
|
||||
Statement = 0;
|
||||
Line = 1;
|
||||
Instruction = 2;
|
||||
}
|
||||
|
||||
message DapLocationsRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 session_id = 2;
|
||||
uint64 location_reference = 3;
|
||||
}
|
||||
|
||||
message DapLocationsResponse {
|
||||
DapSource source = 1;
|
||||
uint64 line = 2;
|
||||
optional uint64 column = 3;
|
||||
optional uint64 end_line = 4;
|
||||
optional uint64 end_column = 5;
|
||||
}
|
||||
|
||||
enum DapEvaluateContext {
|
||||
Repl = 0;
|
||||
Watch = 1;
|
||||
Hover = 2;
|
||||
Clipboard = 3;
|
||||
EvaluateVariables = 4;
|
||||
EvaluateUnknown = 5;
|
||||
}
|
||||
|
||||
message DapEvaluateRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
string expression = 3;
|
||||
optional uint64 frame_id = 4;
|
||||
optional DapEvaluateContext context = 5;
|
||||
}
|
||||
|
||||
message DapEvaluateResponse {
|
||||
string result = 1;
|
||||
optional string evaluate_type = 2;
|
||||
uint64 variable_reference = 3;
|
||||
optional uint64 named_variables = 4;
|
||||
optional uint64 indexed_variables = 5;
|
||||
optional string memory_reference = 6;
|
||||
}
|
||||
|
||||
message DapCompletionRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
string query = 3;
|
||||
optional uint64 frame_id = 4;
|
||||
optional uint64 line = 5;
|
||||
uint64 column = 6;
|
||||
}
|
||||
|
||||
enum DapCompletionItemType {
|
||||
Method = 0;
|
||||
Function = 1;
|
||||
Constructor = 2;
|
||||
Field = 3;
|
||||
Variable = 4;
|
||||
Class = 5;
|
||||
Interface = 6;
|
||||
Module = 7;
|
||||
Property = 8;
|
||||
Unit = 9;
|
||||
Value = 10;
|
||||
Enum = 11;
|
||||
Keyword = 12;
|
||||
Snippet = 13;
|
||||
Text = 14;
|
||||
Color = 15;
|
||||
CompletionItemFile = 16;
|
||||
Reference = 17;
|
||||
Customcolor = 19;
|
||||
}
|
||||
|
||||
message DapCompletionItem {
|
||||
string label = 1;
|
||||
optional string text = 2;
|
||||
optional string sort_text = 3;
|
||||
optional string detail = 4;
|
||||
optional DapCompletionItemType typ = 5;
|
||||
optional uint64 start = 6;
|
||||
optional uint64 length = 7;
|
||||
optional uint64 selection_start = 8;
|
||||
optional uint64 selection_length = 9;
|
||||
}
|
||||
|
||||
message DapCompletionResponse {
|
||||
uint64 client_id = 1;
|
||||
repeated DapCompletionItem completions = 2;
|
||||
}
|
||||
|
||||
message DapScopesRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
uint64 stack_frame_id = 3;
|
||||
}
|
||||
|
||||
message DapScopesResponse {
|
||||
repeated DapScope scopes = 1;
|
||||
}
|
||||
|
||||
message DapSetVariableValueRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
string name = 3;
|
||||
string value = 4;
|
||||
uint64 variables_reference = 5;
|
||||
}
|
||||
|
||||
message DapSetVariableValueResponse {
|
||||
uint64 client_id = 1;
|
||||
string value = 2;
|
||||
optional string variable_type = 3;
|
||||
optional uint64 variables_reference = 4;
|
||||
optional uint64 named_variables = 5;
|
||||
optional uint64 indexed_variables = 6;
|
||||
optional string memory_reference = 7;
|
||||
}
|
||||
|
||||
message DapPauseRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
int64 thread_id = 3;
|
||||
}
|
||||
|
||||
message DapDisconnectRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
optional bool restart = 3;
|
||||
optional bool terminate_debuggee = 4;
|
||||
optional bool suspend_debuggee = 5;
|
||||
}
|
||||
|
||||
message DapTerminateThreadsRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
repeated int64 thread_ids = 3;
|
||||
}
|
||||
|
||||
message DapThreadsRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
}
|
||||
|
||||
message DapThreadsResponse {
|
||||
repeated DapThread threads = 1;
|
||||
}
|
||||
|
||||
message DapTerminateRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
optional bool restart = 3;
|
||||
}
|
||||
|
||||
message DapRestartRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
bytes raw_args = 3;
|
||||
}
|
||||
|
||||
message DapRestartStackFrameRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
uint64 stack_frame_id = 3;
|
||||
}
|
||||
|
||||
message ToggleIgnoreBreakpoints {
|
||||
uint64 project_id = 1;
|
||||
uint32 session_id = 2;
|
||||
}
|
||||
|
||||
message IgnoreBreakpointState {
|
||||
uint64 project_id = 1;
|
||||
uint64 session_id = 2;
|
||||
bool ignore = 3;
|
||||
}
|
||||
|
||||
message DapNextRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
int64 thread_id = 3;
|
||||
optional bool single_thread = 4;
|
||||
optional SteppingGranularity granularity = 5;
|
||||
}
|
||||
|
||||
message DapStepInRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
int64 thread_id = 3;
|
||||
optional uint64 target_id = 4;
|
||||
optional bool single_thread = 5;
|
||||
optional SteppingGranularity granularity = 6;
|
||||
}
|
||||
|
||||
message DapStepOutRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
int64 thread_id = 3;
|
||||
optional bool single_thread = 4;
|
||||
optional SteppingGranularity granularity = 5;
|
||||
}
|
||||
|
||||
message DapStepBackRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
int64 thread_id = 3;
|
||||
optional bool single_thread = 4;
|
||||
optional SteppingGranularity granularity = 5;
|
||||
}
|
||||
|
||||
message DapContinueRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
int64 thread_id = 3;
|
||||
optional bool single_thread = 4;
|
||||
}
|
||||
|
||||
message DapContinueResponse {
|
||||
uint64 client_id = 1;
|
||||
optional bool all_threads_continued = 2;
|
||||
}
|
||||
|
||||
message DapModulesRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
}
|
||||
|
||||
message DapModulesResponse {
|
||||
uint64 client_id = 1;
|
||||
repeated DapModule modules = 2;
|
||||
}
|
||||
|
||||
message DapLoadedSourcesRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
}
|
||||
|
||||
message DapLoadedSourcesResponse {
|
||||
uint64 client_id = 1;
|
||||
repeated DapSource sources = 2;
|
||||
}
|
||||
|
||||
message DapStackTraceRequest {
|
||||
uint64 project_id = 1;
|
||||
uint64 client_id = 2;
|
||||
int64 thread_id = 3;
|
||||
optional uint64 start_frame = 4;
|
||||
optional uint64 stack_trace_levels = 5;
|
||||
}
|
||||
|
||||
message DapStackTraceResponse {
|
||||
repeated DapStackFrame frames = 1;
|
||||
}
|
||||
|
||||
message DapStackFrame {
|
||||
uint64 id = 1;
|
||||
string name = 2;
|
||||
optional DapSource source = 3;
|
||||
uint64 line = 4;
|
||||
uint64 column = 5;
|
||||
optional uint64 end_line = 6;
|
||||
optional uint64 end_column = 7;
|
||||
optional bool can_restart = 8;
|
||||
optional string instruction_pointer_reference = 9;
|
||||
optional DapModuleId module_id = 10;
|
||||
optional DapStackPresentationHint presentation_hint = 11;
|
||||
}
|
||||
|
||||
message DebuggerLoadedSourceList {
|
||||
uint64 client_id = 1;
|
||||
repeated DapSource sources = 2;
|
||||
}
|
||||
|
||||
message DapVariables {
|
||||
uint64 client_id = 1;
|
||||
repeated DapVariable variables = 2;
|
||||
}
|
||||
|
||||
// Remote Debugging: Dap Types
|
||||
message DapVariable {
|
||||
string name = 1;
|
||||
string value = 2;
|
||||
optional string type = 3;
|
||||
// optional DapVariablePresentationHint presentation_hint = 4;
|
||||
optional string evaluate_name = 5;
|
||||
uint64 variables_reference = 6;
|
||||
optional uint64 named_variables = 7;
|
||||
optional uint64 indexed_variables = 8;
|
||||
optional string memory_reference = 9;
|
||||
}
|
||||
|
||||
message DapThread {
|
||||
int64 id = 1;
|
||||
string name = 2;
|
||||
}
|
||||
|
||||
message DapScope {
|
||||
string name = 1;
|
||||
optional DapScopePresentationHint presentation_hint = 2;
|
||||
uint64 variables_reference = 3;
|
||||
optional uint64 named_variables = 4;
|
||||
optional uint64 indexed_variables = 5;
|
||||
bool expensive = 6;
|
||||
optional DapSource source = 7;
|
||||
optional uint64 line = 8;
|
||||
optional uint64 column = 9;
|
||||
optional uint64 end_line = 10;
|
||||
optional uint64 end_column = 11;
|
||||
}
|
||||
|
||||
message DapSource {
|
||||
optional string name = 1;
|
||||
optional string path = 2;
|
||||
optional uint64 source_reference = 3;
|
||||
optional DapSourcePresentationHint presentation_hint = 4;
|
||||
optional string origin = 5;
|
||||
repeated DapSource sources = 6;
|
||||
optional bytes adapter_data = 7;
|
||||
repeated DapChecksum checksums = 8;
|
||||
}
|
||||
|
||||
enum DapOutputCategory {
|
||||
ConsoleOutput = 0;
|
||||
Important = 1;
|
||||
Stdout = 2;
|
||||
Stderr = 3;
|
||||
Unknown = 4;
|
||||
}
|
||||
|
||||
enum DapOutputEventGroup {
|
||||
Start = 0;
|
||||
StartCollapsed = 1;
|
||||
End = 2;
|
||||
}
|
||||
|
||||
message DapOutputEvent {
|
||||
string output = 1;
|
||||
optional DapOutputCategory category = 2;
|
||||
optional uint64 variables_reference = 3;
|
||||
optional DapOutputEventGroup group = 4;
|
||||
optional DapSource source = 5;
|
||||
optional uint32 line = 6;
|
||||
optional uint32 column = 7;
|
||||
}
|
||||
|
||||
enum DapChecksumAlgorithm {
|
||||
CHECKSUM_ALGORITHM_UNSPECIFIED = 0;
|
||||
MD5 = 1;
|
||||
SHA1 = 2;
|
||||
SHA256 = 3;
|
||||
TIMESTAMP = 4;
|
||||
}
|
||||
|
||||
message DapChecksum {
|
||||
DapChecksumAlgorithm algorithm = 1;
|
||||
string checksum = 2;
|
||||
}
|
||||
|
||||
enum DapScopePresentationHint {
|
||||
Arguments = 0;
|
||||
Locals = 1;
|
||||
Registers = 2;
|
||||
ReturnValue = 3;
|
||||
ScopeUnknown = 4;
|
||||
}
|
||||
|
||||
enum DapSourcePresentationHint {
|
||||
SourceNormal = 0;
|
||||
Emphasize = 1;
|
||||
Deemphasize = 2;
|
||||
SourceUnknown = 3;
|
||||
}
|
||||
|
||||
enum DapStackPresentationHint {
|
||||
StackNormal = 0;
|
||||
Label = 1;
|
||||
Subtle = 2;
|
||||
StackUnknown = 3;
|
||||
}
|
||||
message DapModule {
|
||||
DapModuleId id = 1;
|
||||
string name = 2;
|
||||
optional string path = 3;
|
||||
optional bool is_optimized = 4;
|
||||
optional bool is_user_code = 5;
|
||||
optional string version = 6;
|
||||
optional string symbol_status = 7;
|
||||
optional string symbol_file_path = 8;
|
||||
optional string date_time_stamp = 9;
|
||||
optional string address_range = 10;
|
||||
}
|
||||
|
||||
message DebugTaskDefinition {
|
||||
string adapter = 1;
|
||||
string label = 2;
|
||||
string config = 3;
|
||||
optional TcpHost tcp_connection = 4;
|
||||
}
|
||||
|
||||
message TcpHost {
|
||||
optional uint32 port = 1;
|
||||
optional string host = 2;
|
||||
optional uint64 timeout = 3;
|
||||
}
|
||||
|
||||
message DebugLaunchRequest {
|
||||
string program = 1;
|
||||
optional string cwd = 2;
|
||||
repeated string args = 3;
|
||||
map<string, string> env = 4;
|
||||
}
|
||||
|
||||
message DebugAttachRequest {
|
||||
uint32 process_id = 1;
|
||||
}
|
||||
|
||||
message DapModuleId {
|
||||
oneof id {
|
||||
uint32 number = 1;
|
||||
string string = 2;
|
||||
}
|
||||
}
|
||||
|
||||
message GetDebugAdapterBinary {
|
||||
uint64 project_id = 1;
|
||||
uint64 session_id = 3;
|
||||
DebugTaskDefinition definition = 2;
|
||||
uint64 worktree_id = 4;
|
||||
}
|
||||
|
||||
message DebugAdapterBinary {
|
||||
optional string command = 1;
|
||||
repeated string arguments = 2;
|
||||
map<string, string> envs = 3;
|
||||
optional string cwd = 4;
|
||||
optional TcpHost connection = 5;
|
||||
string configuration = 7;
|
||||
LaunchType launch_type = 8;
|
||||
enum LaunchType {
|
||||
Attach = 0;
|
||||
Launch = 1;
|
||||
}
|
||||
}
|
||||
|
||||
message RunDebugLocators {
|
||||
uint64 project_id = 1;
|
||||
SpawnInTerminal build_command = 2;
|
||||
string locator = 3;
|
||||
}
|
||||
|
||||
message DebugRequest {
|
||||
oneof request {
|
||||
DebugLaunchRequest debug_launch_request = 1;
|
||||
DebugAttachRequest debug_attach_request = 2;
|
||||
}
|
||||
}
|
||||
|
||||
message DebugScenario {
|
||||
string label = 1;
|
||||
string adapter = 2;
|
||||
reserved 3;
|
||||
DebugRequest request = 4;
|
||||
optional TcpHost connection = 5;
|
||||
optional bool stop_on_entry = 6;
|
||||
optional string configuration = 7;
|
||||
}
|
||||
|
||||
message LogToDebugConsole {
|
||||
uint64 project_id = 1;
|
||||
uint64 session_id = 2;
|
||||
string message = 3;
|
||||
}
|
||||
|
||||
message GetProcesses {
|
||||
uint64 project_id = 1;
|
||||
}
|
||||
|
||||
message GetProcessesResponse {
|
||||
repeated ProcessInfo processes = 1;
|
||||
}
|
||||
|
||||
message ProcessInfo {
|
||||
uint32 pid = 1;
|
||||
string name = 2;
|
||||
repeated string command = 3;
|
||||
}
|
||||
36
crates/proto/proto/download.proto
Normal file
36
crates/proto/proto/download.proto
Normal file
@@ -0,0 +1,36 @@
|
||||
syntax = "proto3";
|
||||
package zed.messages;
|
||||
|
||||
import "core.proto";
|
||||
import "worktree.proto";
|
||||
|
||||
message DownloadFileByPath {
|
||||
uint64 project_id = 1;
|
||||
uint64 worktree_id = 2;
|
||||
string path = 3;
|
||||
uint64 file_id = 4;
|
||||
}
|
||||
|
||||
message DownloadFileResponse {
|
||||
uint64 file_id = 1;
|
||||
}
|
||||
|
||||
message CreateFileForPeer {
|
||||
uint64 project_id = 1;
|
||||
PeerId peer_id = 2;
|
||||
oneof variant {
|
||||
FileState state = 3;
|
||||
FileChunk chunk = 4;
|
||||
}
|
||||
}
|
||||
|
||||
message FileState {
|
||||
uint64 id = 1;
|
||||
optional File file = 2;
|
||||
uint64 content_size = 3;
|
||||
}
|
||||
|
||||
message FileChunk {
|
||||
uint64 file_id = 1;
|
||||
bytes data = 2;
|
||||
}
|
||||
743
crates/proto/proto/git.proto
Normal file
743
crates/proto/proto/git.proto
Normal file
@@ -0,0 +1,743 @@
|
||||
syntax = "proto3";
|
||||
package zed.messages;
|
||||
|
||||
import "buffer.proto";
|
||||
import "worktree.proto";
|
||||
|
||||
message GitBranchesResponse {
|
||||
repeated Branch branches = 1;
|
||||
}
|
||||
|
||||
message UpdateDiffBases {
|
||||
uint64 project_id = 1;
|
||||
uint64 buffer_id = 2;
|
||||
|
||||
enum Mode {
|
||||
// No collaborator is using the unstaged diff.
|
||||
HEAD_ONLY = 0;
|
||||
// No collaborator is using the diff from HEAD.
|
||||
INDEX_ONLY = 1;
|
||||
// Both the unstaged and uncommitted diffs are demanded,
|
||||
// and the contents of the index and HEAD are the same for this path.
|
||||
INDEX_MATCHES_HEAD = 2;
|
||||
// Both the unstaged and uncommitted diffs are demanded,
|
||||
// and the contents of the index and HEAD differ for this path,
|
||||
// where None means the path doesn't exist in that state of the repo.
|
||||
INDEX_AND_HEAD = 3;
|
||||
}
|
||||
|
||||
optional string staged_text = 3;
|
||||
optional string committed_text = 4;
|
||||
Mode mode = 5;
|
||||
}
|
||||
|
||||
message OpenUnstagedDiff {
|
||||
uint64 project_id = 1;
|
||||
uint64 buffer_id = 2;
|
||||
}
|
||||
|
||||
message OpenUnstagedDiffResponse {
|
||||
optional string staged_text = 1;
|
||||
}
|
||||
|
||||
message OpenUncommittedDiff {
|
||||
uint64 project_id = 1;
|
||||
uint64 buffer_id = 2;
|
||||
}
|
||||
|
||||
message OpenUncommittedDiffResponse {
|
||||
enum Mode {
|
||||
INDEX_MATCHES_HEAD = 0;
|
||||
INDEX_AND_HEAD = 1;
|
||||
}
|
||||
optional string staged_text = 1;
|
||||
optional string committed_text = 2;
|
||||
Mode mode = 3;
|
||||
}
|
||||
|
||||
message SetIndexText {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
string path = 4;
|
||||
optional string text = 5;
|
||||
}
|
||||
|
||||
message GetPermalinkToLine {
|
||||
uint64 project_id = 1;
|
||||
uint64 buffer_id = 2;
|
||||
Range selection = 3;
|
||||
}
|
||||
|
||||
message GetPermalinkToLineResponse {
|
||||
string permalink = 1;
|
||||
}
|
||||
|
||||
message Branch {
|
||||
bool is_head = 1;
|
||||
string ref_name = 2;
|
||||
optional uint64 unix_timestamp = 3;
|
||||
optional GitUpstream upstream = 4;
|
||||
optional CommitSummary most_recent_commit = 5;
|
||||
}
|
||||
|
||||
message GitUpstream {
|
||||
string ref_name = 1;
|
||||
optional UpstreamTracking tracking = 2;
|
||||
}
|
||||
|
||||
message UpstreamTracking {
|
||||
uint64 ahead = 1;
|
||||
uint64 behind = 2;
|
||||
}
|
||||
|
||||
message CommitSummary {
|
||||
string sha = 1;
|
||||
string subject = 2;
|
||||
int64 commit_timestamp = 3;
|
||||
string author_name = 4;
|
||||
}
|
||||
|
||||
message GitBranches {
|
||||
uint64 project_id = 1;
|
||||
ProjectPath repository = 2;
|
||||
}
|
||||
|
||||
message UpdateGitBranch {
|
||||
uint64 project_id = 1;
|
||||
string branch_name = 2;
|
||||
ProjectPath repository = 3;
|
||||
}
|
||||
|
||||
message UpdateRepository {
|
||||
uint64 project_id = 1;
|
||||
uint64 id = 2;
|
||||
string abs_path = 3;
|
||||
repeated uint64 entry_ids = 4;
|
||||
optional Branch branch_summary = 5;
|
||||
repeated StatusEntry updated_statuses = 6;
|
||||
repeated string removed_statuses = 7;
|
||||
repeated string current_merge_conflicts = 8;
|
||||
uint64 scan_id = 9;
|
||||
bool is_last_update = 10;
|
||||
optional GitCommitDetails head_commit_details = 11;
|
||||
optional string merge_message = 12;
|
||||
repeated StashEntry stash_entries = 13;
|
||||
optional string remote_upstream_url = 14;
|
||||
optional string remote_origin_url = 15;
|
||||
reserved 16;
|
||||
repeated Worktree linked_worktrees = 17;
|
||||
repeated Branch branch_list = 18;
|
||||
optional string repository_dir_abs_path = 19;
|
||||
optional string common_dir_abs_path = 20;
|
||||
}
|
||||
|
||||
message RemoveRepository {
|
||||
uint64 project_id = 1;
|
||||
uint64 id = 2;
|
||||
}
|
||||
|
||||
enum GitStatus {
|
||||
Added = 0;
|
||||
Modified = 1;
|
||||
Conflict = 2;
|
||||
Deleted = 3;
|
||||
Updated = 4;
|
||||
TypeChanged = 5;
|
||||
Renamed = 6;
|
||||
Copied = 7;
|
||||
Unmodified = 8;
|
||||
}
|
||||
|
||||
message GitFileStatus {
|
||||
oneof variant {
|
||||
Untracked untracked = 1;
|
||||
Ignored ignored = 2;
|
||||
Unmerged unmerged = 3;
|
||||
Tracked tracked = 4;
|
||||
}
|
||||
|
||||
message Untracked {}
|
||||
message Ignored {}
|
||||
message Unmerged {
|
||||
GitStatus first_head = 1;
|
||||
GitStatus second_head = 2;
|
||||
}
|
||||
message Tracked {
|
||||
GitStatus index_status = 1;
|
||||
GitStatus worktree_status = 2;
|
||||
}
|
||||
}
|
||||
|
||||
message GitGetBranches {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
}
|
||||
|
||||
message GitCreateBranch {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
string branch_name = 4;
|
||||
optional string base_branch = 5;
|
||||
}
|
||||
|
||||
message GitChangeBranch {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
string branch_name = 4;
|
||||
}
|
||||
|
||||
message GitRenameBranch {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
string branch = 3;
|
||||
string new_name = 4;
|
||||
}
|
||||
|
||||
message GitCreateRemote {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
string remote_name = 3;
|
||||
string remote_url = 4;
|
||||
}
|
||||
|
||||
message GitRemoveRemote {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
string remote_name = 3;
|
||||
}
|
||||
|
||||
message GitDeleteBranch {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
string branch_name = 3;
|
||||
bool is_remote = 4;
|
||||
bool force = 5;
|
||||
}
|
||||
|
||||
message GitDiff {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
DiffType diff_type = 4;
|
||||
optional string merge_base_ref = 5;
|
||||
|
||||
enum DiffType {
|
||||
HEAD_TO_WORKTREE = 0;
|
||||
HEAD_TO_INDEX = 1;
|
||||
MERGE_BASE = 2;
|
||||
}
|
||||
}
|
||||
|
||||
message GitDiffResponse {
|
||||
string diff = 1;
|
||||
}
|
||||
|
||||
message GitInit {
|
||||
uint64 project_id = 1;
|
||||
string abs_path = 2;
|
||||
string fallback_branch_name = 3;
|
||||
}
|
||||
|
||||
message GitClone {
|
||||
uint64 project_id = 1;
|
||||
string abs_path = 2;
|
||||
string remote_repo = 3;
|
||||
}
|
||||
|
||||
message GitCloneResponse {
|
||||
bool success = 1;
|
||||
}
|
||||
|
||||
message CheckForPushedCommits {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
}
|
||||
|
||||
message CheckForPushedCommitsResponse {
|
||||
repeated string pushed_to = 1;
|
||||
}
|
||||
|
||||
message GitShow {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
string commit = 4;
|
||||
}
|
||||
|
||||
message GitCommitDetails {
|
||||
string sha = 1;
|
||||
string message = 2;
|
||||
int64 commit_timestamp = 3;
|
||||
string author_email = 4;
|
||||
string author_name = 5;
|
||||
}
|
||||
|
||||
message LoadCommitDiff {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
string commit = 4;
|
||||
}
|
||||
|
||||
message LoadCommitDiffResponse {
|
||||
repeated CommitFile files = 1;
|
||||
}
|
||||
|
||||
message CommitFile {
|
||||
string path = 1;
|
||||
optional string old_text = 2;
|
||||
optional string new_text = 3;
|
||||
bool is_binary = 4;
|
||||
}
|
||||
|
||||
message GitReset {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
string commit = 4;
|
||||
ResetMode mode = 5;
|
||||
enum ResetMode {
|
||||
SOFT = 0;
|
||||
MIXED = 1;
|
||||
}
|
||||
}
|
||||
|
||||
message GitCheckoutFiles {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
string commit = 4;
|
||||
repeated string paths = 5;
|
||||
}
|
||||
|
||||
// Move to `git.proto` once collab's min version is >=0.171.0.
|
||||
message StatusEntry {
|
||||
string repo_path = 1;
|
||||
// Can be removed once collab's min version is >=0.171.0.
|
||||
GitStatus simple_status = 2;
|
||||
GitFileStatus status = 3;
|
||||
optional uint32 diff_stat_added = 4;
|
||||
optional uint32 diff_stat_deleted = 5;
|
||||
}
|
||||
|
||||
message StashEntry {
|
||||
bytes oid = 1;
|
||||
string message = 2;
|
||||
optional string branch = 3;
|
||||
uint64 index = 4;
|
||||
int64 timestamp = 5;
|
||||
}
|
||||
|
||||
message Stage {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
repeated string paths = 4;
|
||||
}
|
||||
|
||||
message Unstage {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
repeated string paths = 4;
|
||||
}
|
||||
|
||||
message Stash {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
repeated string paths = 3;
|
||||
}
|
||||
|
||||
message StashPop {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
optional uint64 stash_index = 3;
|
||||
}
|
||||
|
||||
message StashApply {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
optional uint64 stash_index = 3;
|
||||
}
|
||||
|
||||
message StashDrop {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
optional uint64 stash_index = 3;
|
||||
}
|
||||
|
||||
message Commit {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
optional string name = 4;
|
||||
optional string email = 5;
|
||||
string message = 6;
|
||||
optional CommitOptions options = 7;
|
||||
reserved 8;
|
||||
uint64 askpass_id = 9;
|
||||
|
||||
message CommitOptions {
|
||||
bool amend = 1;
|
||||
bool signoff = 2;
|
||||
bool allow_empty = 3;
|
||||
}
|
||||
}
|
||||
|
||||
message OpenCommitMessageBuffer {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
}
|
||||
|
||||
message Push {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
string remote_name = 4;
|
||||
string branch_name = 5;
|
||||
optional PushOptions options = 6;
|
||||
uint64 askpass_id = 7;
|
||||
string remote_branch_name = 8;
|
||||
|
||||
enum PushOptions {
|
||||
SET_UPSTREAM = 0;
|
||||
FORCE = 1;
|
||||
}
|
||||
}
|
||||
|
||||
message Fetch {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
uint64 askpass_id = 4;
|
||||
optional string remote = 5;
|
||||
}
|
||||
|
||||
message GetRemotes {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
optional string branch_name = 4;
|
||||
bool is_push = 5;
|
||||
}
|
||||
|
||||
message GetRemotesResponse {
|
||||
repeated Remote remotes = 1;
|
||||
|
||||
message Remote {
|
||||
string name = 1;
|
||||
}
|
||||
}
|
||||
|
||||
message Pull {
|
||||
uint64 project_id = 1;
|
||||
reserved 2;
|
||||
uint64 repository_id = 3;
|
||||
string remote_name = 4;
|
||||
optional string branch_name = 5;
|
||||
uint64 askpass_id = 6;
|
||||
bool rebase = 7;
|
||||
}
|
||||
|
||||
message RemoteMessageResponse {
|
||||
string stdout = 1;
|
||||
string stderr = 2;
|
||||
}
|
||||
|
||||
message BlameBuffer {
|
||||
uint64 project_id = 1;
|
||||
uint64 buffer_id = 2;
|
||||
repeated VectorClockEntry version = 3;
|
||||
}
|
||||
|
||||
message BlameEntry {
|
||||
bytes sha = 1;
|
||||
|
||||
uint32 start_line = 2;
|
||||
uint32 end_line = 3;
|
||||
uint32 original_line_number = 4;
|
||||
|
||||
optional string author = 5;
|
||||
optional string author_mail = 6;
|
||||
optional int64 author_time = 7;
|
||||
optional string author_tz = 8;
|
||||
|
||||
optional string committer = 9;
|
||||
optional string committer_mail = 10;
|
||||
optional int64 committer_time = 11;
|
||||
optional string committer_tz = 12;
|
||||
|
||||
optional string summary = 13;
|
||||
optional string previous = 14;
|
||||
|
||||
string filename = 15;
|
||||
}
|
||||
|
||||
message CommitMessage {
|
||||
bytes oid = 1;
|
||||
string message = 2;
|
||||
}
|
||||
|
||||
message CommitPermalink {
|
||||
bytes oid = 1;
|
||||
string permalink = 2;
|
||||
}
|
||||
|
||||
message BlameBufferResponse {
|
||||
message BlameResponse {
|
||||
repeated BlameEntry entries = 1;
|
||||
repeated CommitMessage messages = 2;
|
||||
reserved 3;
|
||||
reserved 4;
|
||||
}
|
||||
|
||||
optional BlameResponse blame_response = 5;
|
||||
|
||||
reserved 1 to 4;
|
||||
}
|
||||
|
||||
message GetDefaultBranch {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
}
|
||||
|
||||
message GetDefaultBranchResponse {
|
||||
optional string branch = 1;
|
||||
}
|
||||
|
||||
message GetTreeDiff {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
bool is_merge = 3;
|
||||
string base = 4;
|
||||
string head = 5;
|
||||
}
|
||||
|
||||
message GetTreeDiffResponse {
|
||||
repeated TreeDiffStatus entries = 1;
|
||||
}
|
||||
|
||||
message TreeDiffStatus {
|
||||
enum Status {
|
||||
ADDED = 0;
|
||||
MODIFIED = 1;
|
||||
DELETED = 2;
|
||||
}
|
||||
|
||||
Status status = 1;
|
||||
string path = 2;
|
||||
optional string oid = 3;
|
||||
}
|
||||
|
||||
message GetBlobContent {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
string oid = 3;
|
||||
}
|
||||
|
||||
message GetBlobContentResponse {
|
||||
string content = 1;
|
||||
}
|
||||
|
||||
message GitGetWorktrees {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
}
|
||||
|
||||
message GitGetHeadSha {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
}
|
||||
|
||||
message GitGetHeadShaResponse {
|
||||
optional string sha = 1;
|
||||
}
|
||||
|
||||
message GitEditRef {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
string ref_name = 3;
|
||||
oneof action {
|
||||
string update_to_commit = 4;
|
||||
DeleteRef delete = 5;
|
||||
}
|
||||
message DeleteRef {}
|
||||
}
|
||||
|
||||
message GitRepairWorktrees {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
}
|
||||
|
||||
message GitWorktreesResponse {
|
||||
repeated Worktree worktrees = 1;
|
||||
}
|
||||
|
||||
message Worktree {
|
||||
string path = 1;
|
||||
string ref_name = 2;
|
||||
string sha = 3;
|
||||
bool is_main = 4;
|
||||
bool is_bare = 5;
|
||||
}
|
||||
|
||||
message GitCreateWorktree {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
string name = 3;
|
||||
string directory = 4;
|
||||
optional string commit = 5;
|
||||
bool use_existing_branch = 6;
|
||||
}
|
||||
|
||||
message GitCreateCheckpoint {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
}
|
||||
|
||||
message GitCreateCheckpointResponse {
|
||||
bytes commit_sha = 1;
|
||||
}
|
||||
|
||||
message GitCreateArchiveCheckpoint {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
}
|
||||
|
||||
message GitCreateArchiveCheckpointResponse {
|
||||
string staged_commit_sha = 1;
|
||||
string unstaged_commit_sha = 2;
|
||||
}
|
||||
|
||||
message GitRestoreCheckpoint {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
bytes commit_sha = 3;
|
||||
}
|
||||
|
||||
message GitRestoreArchiveCheckpoint {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
string staged_commit_sha = 3;
|
||||
string unstaged_commit_sha = 4;
|
||||
}
|
||||
|
||||
message GitCompareCheckpoints {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
bytes left_commit_sha = 3;
|
||||
bytes right_commit_sha = 4;
|
||||
}
|
||||
|
||||
message GitCompareCheckpointsResponse {
|
||||
bool equal = 1;
|
||||
}
|
||||
|
||||
message GitDiffCheckpoints {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
bytes base_commit_sha = 3;
|
||||
bytes target_commit_sha = 4;
|
||||
}
|
||||
|
||||
message GitDiffCheckpointsResponse {
|
||||
string diff = 1;
|
||||
}
|
||||
|
||||
message GitRemoveWorktree {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
string path = 3;
|
||||
bool force = 4;
|
||||
}
|
||||
|
||||
message GitRenameWorktree {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
string old_path = 3;
|
||||
string new_path = 4;
|
||||
}
|
||||
|
||||
message RunGitHook {
|
||||
enum GitHook {
|
||||
PRE_COMMIT = 0;
|
||||
reserved 1;
|
||||
}
|
||||
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
GitHook hook = 3;
|
||||
}
|
||||
|
||||
message GetCommitData {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
repeated string shas = 3;
|
||||
}
|
||||
|
||||
message CommitData {
|
||||
string sha = 1;
|
||||
repeated string parents = 2;
|
||||
string author_name = 3;
|
||||
string author_email = 4;
|
||||
int64 commit_timestamp = 5;
|
||||
string subject = 6;
|
||||
string message = 7;
|
||||
}
|
||||
|
||||
message GetCommitDataResponse {
|
||||
repeated CommitData commits = 1;
|
||||
}
|
||||
|
||||
message GitLogSourceAll {}
|
||||
|
||||
message GitLogSource {
|
||||
oneof source {
|
||||
GitLogSourceAll all = 1;
|
||||
string branch = 2;
|
||||
string sha = 3;
|
||||
string path = 4;
|
||||
}
|
||||
}
|
||||
|
||||
message GetInitialGraphData {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
GitLogSource log_source = 3;
|
||||
|
||||
enum LogOrder {
|
||||
DATE_ORDER = 0;
|
||||
TOPO_ORDER = 1;
|
||||
AUTHOR_DATE_ORDER = 2;
|
||||
REVERSE_CHRONOLOGICAL = 3;
|
||||
}
|
||||
LogOrder log_order = 4;
|
||||
}
|
||||
|
||||
message InitialGraphCommit {
|
||||
string sha = 1;
|
||||
repeated string parents = 2;
|
||||
repeated string ref_names = 3;
|
||||
}
|
||||
|
||||
message GetInitialGraphDataResponse {
|
||||
repeated InitialGraphCommit commits = 1;
|
||||
}
|
||||
|
||||
message SearchCommits {
|
||||
uint64 project_id = 1;
|
||||
uint64 repository_id = 2;
|
||||
GitLogSource log_source = 3;
|
||||
string query = 4;
|
||||
bool case_sensitive = 5;
|
||||
}
|
||||
|
||||
message SearchCommitsResponse {
|
||||
repeated string shas = 1;
|
||||
}
|
||||
36
crates/proto/proto/image.proto
Normal file
36
crates/proto/proto/image.proto
Normal file
@@ -0,0 +1,36 @@
|
||||
syntax = "proto3";
|
||||
package zed.messages;
|
||||
|
||||
import "core.proto";
|
||||
import "worktree.proto";
|
||||
|
||||
message OpenImageByPath {
|
||||
uint64 project_id = 1;
|
||||
uint64 worktree_id = 2;
|
||||
string path = 3;
|
||||
}
|
||||
|
||||
message OpenImageResponse {
|
||||
uint64 image_id = 1;
|
||||
}
|
||||
|
||||
message CreateImageForPeer {
|
||||
uint64 project_id = 1;
|
||||
PeerId peer_id = 2;
|
||||
oneof variant {
|
||||
ImageState state = 3;
|
||||
ImageChunk chunk = 4;
|
||||
}
|
||||
}
|
||||
|
||||
message ImageState {
|
||||
uint64 id = 1;
|
||||
optional File file = 2;
|
||||
uint64 content_size = 3;
|
||||
string format = 4; // e.g., "png", "jpeg", "webp", etc.
|
||||
}
|
||||
|
||||
message ImageChunk {
|
||||
uint64 image_id = 1;
|
||||
bytes data = 2;
|
||||
}
|
||||
1020
crates/proto/proto/lsp.proto
Normal file
1020
crates/proto/proto/lsp.proto
Normal file
File diff suppressed because it is too large
Load Diff
37
crates/proto/proto/notification.proto
Normal file
37
crates/proto/proto/notification.proto
Normal file
@@ -0,0 +1,37 @@
|
||||
syntax = "proto3";
|
||||
package zed.messages;
|
||||
|
||||
message GetNotifications {
|
||||
optional uint64 before_id = 1;
|
||||
}
|
||||
|
||||
message AddNotification {
|
||||
Notification notification = 1;
|
||||
}
|
||||
|
||||
message GetNotificationsResponse {
|
||||
repeated Notification notifications = 1;
|
||||
bool done = 2;
|
||||
}
|
||||
|
||||
message DeleteNotification {
|
||||
uint64 notification_id = 1;
|
||||
}
|
||||
|
||||
message UpdateNotification {
|
||||
Notification notification = 1;
|
||||
}
|
||||
|
||||
message MarkNotificationRead {
|
||||
uint64 notification_id = 1;
|
||||
}
|
||||
|
||||
message Notification {
|
||||
uint64 id = 1;
|
||||
uint64 timestamp = 2;
|
||||
string kind = 3;
|
||||
optional uint64 entity_id = 4;
|
||||
string content = 5;
|
||||
bool is_read = 6;
|
||||
optional bool response = 7;
|
||||
}
|
||||
60
crates/proto/proto/task.proto
Normal file
60
crates/proto/proto/task.proto
Normal file
@@ -0,0 +1,60 @@
|
||||
syntax = "proto3";
|
||||
package zed.messages;
|
||||
|
||||
import "buffer.proto";
|
||||
|
||||
message TaskContextForLocation {
|
||||
uint64 project_id = 1;
|
||||
Location location = 2;
|
||||
map<string, string> task_variables = 3;
|
||||
}
|
||||
|
||||
message TaskContext {
|
||||
optional string cwd = 1;
|
||||
map<string, string> task_variables = 2;
|
||||
map<string, string> project_env = 3;
|
||||
}
|
||||
|
||||
message Shell {
|
||||
message WithArguments {
|
||||
string program = 1;
|
||||
repeated string args = 2;
|
||||
}
|
||||
|
||||
oneof shell_type {
|
||||
System system = 1;
|
||||
string program = 2;
|
||||
WithArguments with_arguments = 3;
|
||||
}
|
||||
}
|
||||
|
||||
message System {}
|
||||
|
||||
enum RevealStrategy {
|
||||
RevealAlways = 0;
|
||||
RevealNever = 1;
|
||||
}
|
||||
|
||||
enum HideStrategy {
|
||||
HideAlways = 0;
|
||||
HideNever = 1;
|
||||
HideOnSuccess = 2;
|
||||
}
|
||||
|
||||
message SpawnInTerminal {
|
||||
string label = 1;
|
||||
optional string command = 2;
|
||||
repeated string args = 3;
|
||||
map<string, string> env = 4;
|
||||
optional string cwd = 5;
|
||||
}
|
||||
|
||||
message GetDirectoryEnvironment {
|
||||
uint64 project_id = 1;
|
||||
Shell shell = 2;
|
||||
string directory = 3;
|
||||
}
|
||||
|
||||
message DirectoryEnvironment {
|
||||
map<string, string> environment = 1;
|
||||
}
|
||||
59
crates/proto/proto/toolchain.proto
Normal file
59
crates/proto/proto/toolchain.proto
Normal file
@@ -0,0 +1,59 @@
|
||||
syntax = "proto3";
|
||||
package zed.messages;
|
||||
|
||||
message ListToolchains {
|
||||
uint64 project_id = 1;
|
||||
uint64 worktree_id = 2;
|
||||
string language_name = 3;
|
||||
optional string path = 4;
|
||||
}
|
||||
|
||||
message Toolchain {
|
||||
string name = 1;
|
||||
string path = 2;
|
||||
string raw_json = 3;
|
||||
}
|
||||
|
||||
message ToolchainGroup {
|
||||
uint64 start_index = 1;
|
||||
string name = 2;
|
||||
}
|
||||
|
||||
message ListToolchainsResponse {
|
||||
repeated Toolchain toolchains = 1;
|
||||
bool has_values = 2;
|
||||
repeated ToolchainGroup groups = 3;
|
||||
optional string relative_worktree_path = 4;
|
||||
}
|
||||
|
||||
message ActivateToolchain {
|
||||
uint64 project_id = 1;
|
||||
uint64 worktree_id = 2;
|
||||
Toolchain toolchain = 3;
|
||||
string language_name = 4;
|
||||
optional string path = 5;
|
||||
}
|
||||
|
||||
message ActiveToolchain {
|
||||
uint64 project_id = 1;
|
||||
uint64 worktree_id = 2;
|
||||
string language_name = 3;
|
||||
optional string path = 4;
|
||||
}
|
||||
|
||||
message ActiveToolchainResponse {
|
||||
optional Toolchain toolchain = 1;
|
||||
}
|
||||
|
||||
message ResolveToolchain {
|
||||
uint64 project_id = 1;
|
||||
string abs_path = 2;
|
||||
string language_name = 3;
|
||||
}
|
||||
|
||||
message ResolveToolchainResponse {
|
||||
oneof response {
|
||||
Toolchain toolchain = 1;
|
||||
string error = 2;
|
||||
}
|
||||
}
|
||||
196
crates/proto/proto/worktree.proto
Normal file
196
crates/proto/proto/worktree.proto
Normal file
@@ -0,0 +1,196 @@
|
||||
syntax = "proto3";
|
||||
package zed.messages;
|
||||
|
||||
message Timestamp {
|
||||
uint64 seconds = 1;
|
||||
uint32 nanos = 2;
|
||||
}
|
||||
|
||||
message File {
|
||||
uint64 worktree_id = 1;
|
||||
optional uint64 entry_id = 2;
|
||||
string path = 3;
|
||||
Timestamp mtime = 4;
|
||||
bool is_deleted = 5;
|
||||
bool is_historic = 6;
|
||||
}
|
||||
|
||||
message Entry {
|
||||
uint64 id = 1;
|
||||
bool is_dir = 2;
|
||||
string path = 3;
|
||||
uint64 inode = 4;
|
||||
Timestamp mtime = 5;
|
||||
bool is_ignored = 7;
|
||||
bool is_external = 8;
|
||||
reserved 6;
|
||||
reserved 9;
|
||||
bool is_fifo = 10;
|
||||
optional uint64 size = 11;
|
||||
optional string canonical_path = 12;
|
||||
bool is_hidden = 13;
|
||||
}
|
||||
|
||||
message AddWorktree {
|
||||
string path = 1;
|
||||
uint64 project_id = 2;
|
||||
bool visible = 3;
|
||||
}
|
||||
|
||||
message AddWorktreeResponse {
|
||||
uint64 worktree_id = 1;
|
||||
string canonicalized_path = 2;
|
||||
optional string root_repo_common_dir = 3;
|
||||
}
|
||||
|
||||
message RemoveWorktree {
|
||||
uint64 worktree_id = 1;
|
||||
}
|
||||
|
||||
message GetPathMetadata {
|
||||
uint64 project_id = 1;
|
||||
string path = 2;
|
||||
}
|
||||
|
||||
message GetPathMetadataResponse {
|
||||
bool exists = 1;
|
||||
string path = 2;
|
||||
bool is_dir = 3;
|
||||
}
|
||||
|
||||
message WorktreeMetadata {
|
||||
uint64 id = 1;
|
||||
string root_name = 2;
|
||||
bool visible = 3;
|
||||
string abs_path = 4;
|
||||
optional string root_repo_common_dir = 5;
|
||||
}
|
||||
|
||||
message ProjectPath {
|
||||
uint64 worktree_id = 1;
|
||||
string path = 2;
|
||||
}
|
||||
|
||||
message ListRemoteDirectoryConfig {
|
||||
bool is_dir = 1;
|
||||
}
|
||||
|
||||
message ListRemoteDirectory {
|
||||
uint64 dev_server_id = 1;
|
||||
string path = 2;
|
||||
ListRemoteDirectoryConfig config = 3;
|
||||
}
|
||||
|
||||
message EntryInfo {
|
||||
bool is_dir = 1;
|
||||
}
|
||||
|
||||
message ListRemoteDirectoryResponse {
|
||||
repeated string entries = 1;
|
||||
repeated EntryInfo entry_info = 2;
|
||||
}
|
||||
|
||||
message CreateProjectEntry {
|
||||
uint64 project_id = 1;
|
||||
uint64 worktree_id = 2;
|
||||
string path = 3;
|
||||
bool is_directory = 4;
|
||||
optional bytes content = 5;
|
||||
}
|
||||
|
||||
message RenameProjectEntry {
|
||||
uint64 project_id = 1;
|
||||
uint64 entry_id = 2;
|
||||
string new_path = 3;
|
||||
uint64 new_worktree_id = 4;
|
||||
}
|
||||
|
||||
message CopyProjectEntry {
|
||||
uint64 project_id = 1;
|
||||
uint64 entry_id = 2;
|
||||
string new_path = 3;
|
||||
uint64 new_worktree_id = 5;
|
||||
reserved 4;
|
||||
}
|
||||
|
||||
message DeleteProjectEntry {
|
||||
uint64 project_id = 1;
|
||||
uint64 entry_id = 2;
|
||||
bool use_trash = 3;
|
||||
}
|
||||
|
||||
message ExpandProjectEntry {
|
||||
uint64 project_id = 1;
|
||||
uint64 entry_id = 2;
|
||||
}
|
||||
|
||||
message ExpandProjectEntryResponse {
|
||||
uint64 worktree_scan_id = 1;
|
||||
}
|
||||
|
||||
message ExpandAllForProjectEntry {
|
||||
uint64 project_id = 1;
|
||||
uint64 entry_id = 2;
|
||||
}
|
||||
|
||||
message ExpandAllForProjectEntryResponse {
|
||||
uint64 worktree_scan_id = 1;
|
||||
}
|
||||
|
||||
message ProjectEntryResponse {
|
||||
optional Entry entry = 1;
|
||||
uint64 worktree_scan_id = 2;
|
||||
}
|
||||
|
||||
message UpdateWorktreeSettings {
|
||||
uint64 project_id = 1;
|
||||
uint64 worktree_id = 2;
|
||||
string path = 3;
|
||||
optional string content = 4;
|
||||
optional LocalSettingsKind kind = 5;
|
||||
optional bool outside_worktree = 6;
|
||||
}
|
||||
|
||||
enum LocalSettingsKind {
|
||||
Settings = 0;
|
||||
Tasks = 1;
|
||||
Editorconfig = 2;
|
||||
Debug = 3;
|
||||
}
|
||||
|
||||
message UpdateUserSettings {
|
||||
uint64 project_id = 1;
|
||||
string contents = 2;
|
||||
}
|
||||
|
||||
message TrustWorktrees {
|
||||
uint64 project_id = 1;
|
||||
repeated PathTrust trusted_paths = 2;
|
||||
}
|
||||
|
||||
message PathTrust {
|
||||
oneof content {
|
||||
uint64 worktree_id = 2;
|
||||
string abs_path = 3;
|
||||
}
|
||||
|
||||
reserved 1;
|
||||
}
|
||||
|
||||
message RestrictWorktrees {
|
||||
uint64 project_id = 1;
|
||||
repeated uint64 worktree_ids = 3;
|
||||
|
||||
reserved 2;
|
||||
}
|
||||
|
||||
// Request from the remote server to the client to allocate a new worktree ID.
|
||||
// This allows the client to maintain a single WorktreeIdCounter that prevents
|
||||
// ID collisions when connected to multiple remote servers.
|
||||
message AllocateWorktreeId {
|
||||
uint64 project_id = 1;
|
||||
}
|
||||
|
||||
message AllocateWorktreeIdResponse {
|
||||
uint64 worktree_id = 1;
|
||||
}
|
||||
581
crates/proto/proto/zed.proto
Normal file
581
crates/proto/proto/zed.proto
Normal file
@@ -0,0 +1,581 @@
|
||||
syntax = "proto3";
|
||||
package zed.messages;
|
||||
|
||||
import "ai.proto";
|
||||
import "app.proto";
|
||||
import "buffer.proto";
|
||||
import "call.proto";
|
||||
import "channel.proto";
|
||||
import "core.proto";
|
||||
import "debugger.proto";
|
||||
import "download.proto";
|
||||
import "git.proto";
|
||||
import "image.proto";
|
||||
import "lsp.proto";
|
||||
import "notification.proto";
|
||||
import "task.proto";
|
||||
import "toolchain.proto";
|
||||
import "worktree.proto";
|
||||
|
||||
// Looking for a number? Search "// current max"
|
||||
message Envelope {
|
||||
uint32 id = 1;
|
||||
optional uint32 responding_to = 2;
|
||||
optional PeerId original_sender_id = 3;
|
||||
optional uint32 ack_id = 266;
|
||||
|
||||
oneof payload {
|
||||
Hello hello = 4;
|
||||
Ack ack = 5;
|
||||
Error error = 6;
|
||||
Ping ping = 7;
|
||||
Test test = 8;
|
||||
EndStream end_stream = 165;
|
||||
|
||||
CreateRoom create_room = 9;
|
||||
CreateRoomResponse create_room_response = 10;
|
||||
JoinRoom join_room = 11;
|
||||
JoinRoomResponse join_room_response = 12;
|
||||
RejoinRoom rejoin_room = 13;
|
||||
RejoinRoomResponse rejoin_room_response = 14;
|
||||
LeaveRoom leave_room = 15;
|
||||
Call call = 16;
|
||||
IncomingCall incoming_call = 17;
|
||||
CallCanceled call_canceled = 18;
|
||||
CancelCall cancel_call = 19;
|
||||
DeclineCall decline_call = 20;
|
||||
UpdateParticipantLocation update_participant_location = 21;
|
||||
RoomUpdated room_updated = 22;
|
||||
|
||||
ShareProject share_project = 23;
|
||||
ShareProjectResponse share_project_response = 24;
|
||||
UnshareProject unshare_project = 25;
|
||||
JoinProject join_project = 26;
|
||||
JoinProjectResponse join_project_response = 27;
|
||||
LeaveProject leave_project = 28;
|
||||
AddProjectCollaborator add_project_collaborator = 29;
|
||||
UpdateProjectCollaborator update_project_collaborator = 30;
|
||||
RemoveProjectCollaborator remove_project_collaborator = 31;
|
||||
|
||||
GetDefinition get_definition = 32;
|
||||
GetDefinitionResponse get_definition_response = 33;
|
||||
GetDeclaration get_declaration = 237;
|
||||
GetDeclarationResponse get_declaration_response = 238;
|
||||
GetTypeDefinition get_type_definition = 34;
|
||||
GetTypeDefinitionResponse get_type_definition_response = 35;
|
||||
|
||||
GetReferences get_references = 36;
|
||||
GetReferencesResponse get_references_response = 37;
|
||||
GetDocumentHighlights get_document_highlights = 38;
|
||||
GetDocumentHighlightsResponse get_document_highlights_response = 39;
|
||||
GetProjectSymbols get_project_symbols = 40;
|
||||
GetProjectSymbolsResponse get_project_symbols_response = 41;
|
||||
OpenBufferForSymbol open_buffer_for_symbol = 42;
|
||||
OpenBufferForSymbolResponse open_buffer_for_symbol_response = 43;
|
||||
|
||||
UpdateProject update_project = 44;
|
||||
UpdateWorktree update_worktree = 45;
|
||||
|
||||
CreateProjectEntry create_project_entry = 46;
|
||||
RenameProjectEntry rename_project_entry = 47;
|
||||
CopyProjectEntry copy_project_entry = 48;
|
||||
DeleteProjectEntry delete_project_entry = 49;
|
||||
ProjectEntryResponse project_entry_response = 50;
|
||||
ExpandProjectEntry expand_project_entry = 51;
|
||||
ExpandProjectEntryResponse expand_project_entry_response = 52;
|
||||
ExpandAllForProjectEntry expand_all_for_project_entry = 291;
|
||||
ExpandAllForProjectEntryResponse expand_all_for_project_entry_response = 292;
|
||||
UpdateDiagnosticSummary update_diagnostic_summary = 53;
|
||||
StartLanguageServer start_language_server = 54;
|
||||
UpdateLanguageServer update_language_server = 55;
|
||||
|
||||
OpenBufferById open_buffer_by_id = 56;
|
||||
OpenBufferByPath open_buffer_by_path = 57;
|
||||
OpenBufferResponse open_buffer_response = 58;
|
||||
CreateBufferForPeer create_buffer_for_peer = 59;
|
||||
UpdateBuffer update_buffer = 60;
|
||||
UpdateBufferFile update_buffer_file = 61;
|
||||
SaveBuffer save_buffer = 62;
|
||||
BufferSaved buffer_saved = 63;
|
||||
BufferReloaded buffer_reloaded = 64;
|
||||
ReloadBuffers reload_buffers = 65;
|
||||
ReloadBuffersResponse reload_buffers_response = 66;
|
||||
SynchronizeBuffers synchronize_buffers = 67;
|
||||
SynchronizeBuffersResponse synchronize_buffers_response = 68;
|
||||
FormatBuffers format_buffers = 69;
|
||||
FormatBuffersResponse format_buffers_response = 70;
|
||||
GetCompletions get_completions = 71;
|
||||
GetCompletionsResponse get_completions_response = 72;
|
||||
ResolveCompletionDocumentation resolve_completion_documentation = 73;
|
||||
ResolveCompletionDocumentationResponse resolve_completion_documentation_response = 74;
|
||||
ApplyCompletionAdditionalEdits apply_completion_additional_edits = 75;
|
||||
ApplyCompletionAdditionalEditsResponse apply_completion_additional_edits_response = 76;
|
||||
GetCodeActions get_code_actions = 77;
|
||||
GetCodeActionsResponse get_code_actions_response = 78;
|
||||
GetHover get_hover = 79;
|
||||
GetHoverResponse get_hover_response = 80;
|
||||
ApplyCodeAction apply_code_action = 81;
|
||||
ApplyCodeActionResponse apply_code_action_response = 82;
|
||||
PrepareRename prepare_rename = 83;
|
||||
PrepareRenameResponse prepare_rename_response = 84;
|
||||
PerformRename perform_rename = 85;
|
||||
PerformRenameResponse perform_rename_response = 86;
|
||||
|
||||
UpdateContacts update_contacts = 89;
|
||||
ShowContacts show_contacts = 91;
|
||||
|
||||
GetUsers get_users = 92;
|
||||
FuzzySearchUsers fuzzy_search_users = 93;
|
||||
UsersResponse users_response = 94;
|
||||
RequestContact request_contact = 95;
|
||||
RespondToContactRequest respond_to_contact_request = 96;
|
||||
RemoveContact remove_contact = 97;
|
||||
|
||||
Follow follow = 98;
|
||||
FollowResponse follow_response = 99;
|
||||
UpdateFollowers update_followers = 100;
|
||||
Unfollow unfollow = 101;
|
||||
UpdateDiffBases update_diff_bases = 104;
|
||||
|
||||
OnTypeFormatting on_type_formatting = 105;
|
||||
OnTypeFormattingResponse on_type_formatting_response = 106;
|
||||
|
||||
UpdateWorktreeSettings update_worktree_settings = 107;
|
||||
|
||||
InlayHints inlay_hints = 108;
|
||||
InlayHintsResponse inlay_hints_response = 109;
|
||||
ResolveInlayHint resolve_inlay_hint = 110;
|
||||
ResolveInlayHintResponse resolve_inlay_hint_response = 111;
|
||||
RefreshInlayHints refresh_inlay_hints = 112;
|
||||
|
||||
CreateChannel create_channel = 113;
|
||||
CreateChannelResponse create_channel_response = 114;
|
||||
InviteChannelMember invite_channel_member = 115;
|
||||
RemoveChannelMember remove_channel_member = 116;
|
||||
RespondToChannelInvite respond_to_channel_invite = 117;
|
||||
UpdateChannels update_channels = 118;
|
||||
JoinChannel join_channel = 119;
|
||||
DeleteChannel delete_channel = 120;
|
||||
GetChannelMembers get_channel_members = 121;
|
||||
GetChannelMembersResponse get_channel_members_response = 122;
|
||||
SetChannelMemberRole set_channel_member_role = 123;
|
||||
RenameChannel rename_channel = 124;
|
||||
RenameChannelResponse rename_channel_response = 125;
|
||||
SubscribeToChannels subscribe_to_channels = 207;
|
||||
|
||||
JoinChannelBuffer join_channel_buffer = 126;
|
||||
JoinChannelBufferResponse join_channel_buffer_response = 127;
|
||||
UpdateChannelBuffer update_channel_buffer = 128;
|
||||
LeaveChannelBuffer leave_channel_buffer = 129;
|
||||
UpdateChannelBufferCollaborators update_channel_buffer_collaborators = 130;
|
||||
RejoinChannelBuffers rejoin_channel_buffers = 131;
|
||||
RejoinChannelBuffersResponse rejoin_channel_buffers_response = 132;
|
||||
AckBufferOperation ack_buffer_operation = 133;
|
||||
|
||||
JoinChannelChat join_channel_chat = 134;
|
||||
JoinChannelChatResponse join_channel_chat_response = 135;
|
||||
LeaveChannelChat leave_channel_chat = 136;
|
||||
SendChannelMessage send_channel_message = 137;
|
||||
SendChannelMessageResponse send_channel_message_response = 138;
|
||||
ChannelMessageSent channel_message_sent = 139;
|
||||
GetChannelMessages get_channel_messages = 140;
|
||||
GetChannelMessagesResponse get_channel_messages_response = 141;
|
||||
RemoveChannelMessage remove_channel_message = 142;
|
||||
AckChannelMessage ack_channel_message = 143;
|
||||
GetChannelMessagesById get_channel_messages_by_id = 144;
|
||||
|
||||
MoveChannel move_channel = 147;
|
||||
ReorderChannel reorder_channel = 349;
|
||||
SetChannelVisibility set_channel_visibility = 148;
|
||||
|
||||
AddNotification add_notification = 149;
|
||||
GetNotifications get_notifications = 150;
|
||||
GetNotificationsResponse get_notifications_response = 151;
|
||||
DeleteNotification delete_notification = 152;
|
||||
MarkNotificationRead mark_notification_read = 153;
|
||||
LspExtExpandMacro lsp_ext_expand_macro = 154;
|
||||
LspExtExpandMacroResponse lsp_ext_expand_macro_response = 155;
|
||||
SetRoomParticipantRole set_room_participant_role = 156;
|
||||
|
||||
UpdateUserChannels update_user_channels = 157;
|
||||
|
||||
GetImplementation get_implementation = 162;
|
||||
GetImplementationResponse get_implementation_response = 163;
|
||||
|
||||
UpdateChannelMessage update_channel_message = 170;
|
||||
ChannelMessageUpdate channel_message_update = 171;
|
||||
|
||||
BlameBuffer blame_buffer = 172;
|
||||
BlameBufferResponse blame_buffer_response = 173;
|
||||
|
||||
UpdateNotification update_notification = 174;
|
||||
|
||||
RestartLanguageServers restart_language_servers = 208;
|
||||
|
||||
RejoinRemoteProjects rejoin_remote_projects = 186;
|
||||
RejoinRemoteProjectsResponse rejoin_remote_projects_response = 187;
|
||||
|
||||
OpenNewBuffer open_new_buffer = 196;
|
||||
|
||||
TaskContextForLocation task_context_for_location = 203;
|
||||
TaskContext task_context = 204;
|
||||
|
||||
LinkedEditingRange linked_editing_range = 209;
|
||||
LinkedEditingRangeResponse linked_editing_range_response = 210;
|
||||
|
||||
GetSignatureHelp get_signature_help = 217;
|
||||
GetSignatureHelpResponse get_signature_help_response = 218;
|
||||
|
||||
ListRemoteDirectory list_remote_directory = 219;
|
||||
ListRemoteDirectoryResponse list_remote_directory_response = 220;
|
||||
AddWorktree add_worktree = 222;
|
||||
AddWorktreeResponse add_worktree_response = 223;
|
||||
|
||||
LspExtSwitchSourceHeader lsp_ext_switch_source_header = 241;
|
||||
LspExtSwitchSourceHeaderResponse lsp_ext_switch_source_header_response = 242;
|
||||
|
||||
FindSearchCandidates find_search_candidates = 243;
|
||||
|
||||
CloseBuffer close_buffer = 245;
|
||||
|
||||
ShutdownRemoteServer shutdown_remote_server = 257;
|
||||
|
||||
RemoveWorktree remove_worktree = 258;
|
||||
|
||||
LanguageServerLog language_server_log = 260;
|
||||
|
||||
Toast toast = 261;
|
||||
HideToast hide_toast = 262;
|
||||
|
||||
OpenServerSettings open_server_settings = 263;
|
||||
|
||||
GetPermalinkToLine get_permalink_to_line = 264;
|
||||
GetPermalinkToLineResponse get_permalink_to_line_response = 265;
|
||||
|
||||
FlushBufferedMessages flush_buffered_messages = 267;
|
||||
|
||||
LanguageServerPromptRequest language_server_prompt_request = 268;
|
||||
LanguageServerPromptResponse language_server_prompt_response = 269;
|
||||
|
||||
GitBranchesResponse git_branches_response = 271;
|
||||
|
||||
UpdateGitBranch update_git_branch = 272;
|
||||
|
||||
ListToolchains list_toolchains = 273;
|
||||
ListToolchainsResponse list_toolchains_response = 274;
|
||||
ActivateToolchain activate_toolchain = 275;
|
||||
ActiveToolchain active_toolchain = 276;
|
||||
ActiveToolchainResponse active_toolchain_response = 277;
|
||||
|
||||
GetPathMetadata get_path_metadata = 278;
|
||||
GetPathMetadataResponse get_path_metadata_response = 279;
|
||||
|
||||
CancelLanguageServerWork cancel_language_server_work = 282;
|
||||
|
||||
LspExtOpenDocs lsp_ext_open_docs = 283;
|
||||
LspExtOpenDocsResponse lsp_ext_open_docs_response = 284;
|
||||
|
||||
SyncExtensions sync_extensions = 285;
|
||||
SyncExtensionsResponse sync_extensions_response = 286;
|
||||
InstallExtension install_extension = 287;
|
||||
|
||||
OpenUnstagedDiff open_unstaged_diff = 288;
|
||||
OpenUnstagedDiffResponse open_unstaged_diff_response = 289;
|
||||
|
||||
RegisterBufferWithLanguageServers register_buffer_with_language_servers = 290;
|
||||
|
||||
Stage stage = 293;
|
||||
Unstage unstage = 294;
|
||||
Commit commit = 295;
|
||||
OpenCommitMessageBuffer open_commit_message_buffer = 296;
|
||||
|
||||
OpenUncommittedDiff open_uncommitted_diff = 297;
|
||||
OpenUncommittedDiffResponse open_uncommitted_diff_response = 298;
|
||||
|
||||
SetIndexText set_index_text = 299;
|
||||
|
||||
GitShow git_show = 300;
|
||||
GitReset git_reset = 301;
|
||||
GitCommitDetails git_commit_details = 302;
|
||||
GitCheckoutFiles git_checkout_files = 303;
|
||||
|
||||
Push push = 304;
|
||||
Fetch fetch = 305;
|
||||
GetRemotes get_remotes = 306;
|
||||
GetRemotesResponse get_remotes_response = 307;
|
||||
Pull pull = 308;
|
||||
|
||||
ApplyCodeActionKind apply_code_action_kind = 309;
|
||||
ApplyCodeActionKindResponse apply_code_action_kind_response = 310;
|
||||
|
||||
RemoteMessageResponse remote_message_response = 311;
|
||||
|
||||
GitGetBranches git_get_branches = 312;
|
||||
GitCreateBranch git_create_branch = 313;
|
||||
GitChangeBranch git_change_branch = 314;
|
||||
|
||||
CheckForPushedCommits check_for_pushed_commits = 315;
|
||||
CheckForPushedCommitsResponse check_for_pushed_commits_response = 316;
|
||||
|
||||
AskPassRequest ask_pass_request = 317;
|
||||
AskPassResponse ask_pass_response = 318;
|
||||
|
||||
GitDiff git_diff = 319;
|
||||
GitDiffResponse git_diff_response = 320;
|
||||
GitInit git_init = 321;
|
||||
|
||||
CodeLens code_lens = 322;
|
||||
GetCodeLens get_code_lens = 323;
|
||||
GetCodeLensResponse get_code_lens_response = 324;
|
||||
RefreshCodeLens refresh_code_lens = 325;
|
||||
|
||||
ToggleBreakpoint toggle_breakpoint = 326;
|
||||
BreakpointsForFile breakpoints_for_file = 327;
|
||||
|
||||
UpdateRepository update_repository = 328;
|
||||
RemoveRepository remove_repository = 329;
|
||||
|
||||
GetDocumentSymbols get_document_symbols = 330;
|
||||
GetDocumentSymbolsResponse get_document_symbols_response = 331;
|
||||
|
||||
LoadCommitDiff load_commit_diff = 334;
|
||||
LoadCommitDiffResponse load_commit_diff_response = 335;
|
||||
|
||||
StopLanguageServers stop_language_servers = 336;
|
||||
|
||||
LspExtRunnables lsp_ext_runnables = 337;
|
||||
LspExtRunnablesResponse lsp_ext_runnables_response = 338;
|
||||
|
||||
GetDebugAdapterBinary get_debug_adapter_binary = 339;
|
||||
DebugAdapterBinary debug_adapter_binary = 340;
|
||||
RunDebugLocators run_debug_locators = 341;
|
||||
DebugRequest debug_request = 342;
|
||||
|
||||
LspExtGoToParentModule lsp_ext_go_to_parent_module = 343;
|
||||
LspExtGoToParentModuleResponse lsp_ext_go_to_parent_module_response = 344;
|
||||
LspExtCancelFlycheck lsp_ext_cancel_flycheck = 345;
|
||||
LspExtRunFlycheck lsp_ext_run_flycheck = 346;
|
||||
LspExtClearFlycheck lsp_ext_clear_flycheck = 347;
|
||||
|
||||
LogToDebugConsole log_to_debug_console = 348;
|
||||
|
||||
GetDocumentDiagnostics get_document_diagnostics = 350;
|
||||
GetDocumentDiagnosticsResponse get_document_diagnostics_response = 351;
|
||||
PullWorkspaceDiagnostics pull_workspace_diagnostics = 352;
|
||||
|
||||
GetDocumentColor get_document_color = 353;
|
||||
GetDocumentColorResponse get_document_color_response = 354;
|
||||
GetColorPresentation get_color_presentation = 355;
|
||||
GetColorPresentationResponse get_color_presentation_response = 356;
|
||||
|
||||
Stash stash = 357;
|
||||
StashPop stash_pop = 358;
|
||||
|
||||
GetDefaultBranch get_default_branch = 359;
|
||||
GetDefaultBranchResponse get_default_branch_response = 360;
|
||||
|
||||
GetCrashFiles get_crash_files = 361;
|
||||
GetCrashFilesResponse get_crash_files_response = 362;
|
||||
|
||||
GitClone git_clone = 363;
|
||||
GitCloneResponse git_clone_response = 364;
|
||||
|
||||
LspQuery lsp_query = 365;
|
||||
LspQueryResponse lsp_query_response = 366;
|
||||
ToggleLspLogs toggle_lsp_logs = 367;
|
||||
|
||||
UpdateUserSettings update_user_settings = 368;
|
||||
|
||||
GetProcesses get_processes = 369;
|
||||
GetProcessesResponse get_processes_response = 370;
|
||||
|
||||
ResolveToolchain resolve_toolchain = 371;
|
||||
ResolveToolchainResponse resolve_toolchain_response = 372;
|
||||
|
||||
GetAgentServerCommand get_agent_server_command = 373;
|
||||
AgentServerCommand agent_server_command = 374;
|
||||
|
||||
ExternalAgentsUpdated external_agents_updated = 375;
|
||||
ExternalAgentLoadingStatusUpdated external_agent_loading_status_updated = 376;
|
||||
NewExternalAgentVersionAvailable new_external_agent_version_available = 377;
|
||||
|
||||
StashDrop stash_drop = 378;
|
||||
StashApply stash_apply = 379;
|
||||
|
||||
GitRenameBranch git_rename_branch = 380;
|
||||
|
||||
RemoteStarted remote_started = 381;
|
||||
|
||||
GetDirectoryEnvironment get_directory_environment = 382;
|
||||
DirectoryEnvironment directory_environment = 383;
|
||||
|
||||
GetTreeDiff get_tree_diff = 384;
|
||||
GetTreeDiffResponse get_tree_diff_response = 385;
|
||||
|
||||
GetBlobContent get_blob_content = 386;
|
||||
GetBlobContentResponse get_blob_content_response = 387;
|
||||
|
||||
GitWorktreesResponse git_worktrees_response = 388;
|
||||
GitGetWorktrees git_get_worktrees = 389;
|
||||
GitCreateWorktree git_create_worktree = 390;
|
||||
|
||||
OpenImageByPath open_image_by_path = 391;
|
||||
OpenImageResponse open_image_response = 392;
|
||||
CreateImageForPeer create_image_for_peer = 393;
|
||||
|
||||
RunGitHook run_git_hook = 399;
|
||||
|
||||
GitDeleteBranch git_delete_branch = 400;
|
||||
|
||||
ExternalExtensionAgentsUpdated external_extension_agents_updated = 401;
|
||||
|
||||
GitCreateRemote git_create_remote = 402;
|
||||
GitRemoveRemote git_remove_remote = 403;
|
||||
|
||||
TrustWorktrees trust_worktrees = 404;
|
||||
RestrictWorktrees restrict_worktrees = 405;
|
||||
|
||||
ShareAgentThread share_agent_thread = 406;
|
||||
GetSharedAgentThread get_shared_agent_thread = 407;
|
||||
GetSharedAgentThreadResponse get_shared_agent_thread_response = 408;
|
||||
|
||||
FindSearchCandidatesChunk find_search_candidates_chunk = 409;
|
||||
FindSearchCandidatesCancelled find_search_candidates_cancelled = 410;
|
||||
GetContextServerCommand get_context_server_command = 411;
|
||||
ContextServerCommand context_server_command = 412;
|
||||
|
||||
AllocateWorktreeId allocate_worktree_id = 413;
|
||||
AllocateWorktreeIdResponse allocate_worktree_id_response = 414;
|
||||
|
||||
DownloadFileByPath download_file_by_path = 415;
|
||||
DownloadFileResponse download_file_response = 416;
|
||||
CreateFileForPeer create_file_for_peer = 417;
|
||||
|
||||
SemanticTokens semantic_tokens = 418;
|
||||
SemanticTokensResponse semantic_tokens_response = 419;
|
||||
RefreshSemanticTokens refresh_semantic_tokens = 420;
|
||||
GetFoldingRanges get_folding_ranges = 421;
|
||||
GetFoldingRangesResponse get_folding_ranges_response = 422;
|
||||
|
||||
GetRemoteProfilingData get_remote_profiling_data = 423;
|
||||
GetRemoteProfilingDataResponse get_remote_profiling_data_response = 424;
|
||||
|
||||
SpawnKernel spawn_kernel = 426;
|
||||
SpawnKernelResponse spawn_kernel_response = 427;
|
||||
KillKernel kill_kernel = 428;
|
||||
GitRemoveWorktree git_remove_worktree = 431;
|
||||
GitRenameWorktree git_rename_worktree = 432;
|
||||
GitCreateCheckpoint git_create_checkpoint = 433;
|
||||
GitCreateCheckpointResponse git_create_checkpoint_response = 434;
|
||||
GitRestoreCheckpoint git_restore_checkpoint = 435;
|
||||
GitCompareCheckpoints git_compare_checkpoints = 436;
|
||||
GitCompareCheckpointsResponse git_compare_checkpoints_response = 437;
|
||||
GitDiffCheckpoints git_diff_checkpoints = 438;
|
||||
GitDiffCheckpointsResponse git_diff_checkpoints_response = 439;
|
||||
GitGetHeadSha git_get_head_sha = 440;
|
||||
GitGetHeadShaResponse git_get_head_sha_response = 441;
|
||||
GitRepairWorktrees git_repair_worktrees = 442;
|
||||
GitEditRef git_edit_ref = 443;
|
||||
GitCreateArchiveCheckpoint git_create_archive_checkpoint = 444;
|
||||
GitCreateArchiveCheckpointResponse git_create_archive_checkpoint_response = 445;
|
||||
GitRestoreArchiveCheckpoint git_restore_archive_checkpoint = 446;
|
||||
GetCommitData get_commit_data = 447;
|
||||
GetCommitDataResponse get_commit_data_response = 448;
|
||||
SearchCommits search_commits = 449;
|
||||
SearchCommitsResponse search_commits_response = 450;
|
||||
GetInitialGraphData get_initial_graph_data = 451;
|
||||
GetInitialGraphDataResponse get_initial_graph_data_response = 452; // current max
|
||||
}
|
||||
|
||||
reserved 87 to 88;
|
||||
reserved 90;
|
||||
reserved 102 to 103;
|
||||
reserved 158 to 161;
|
||||
reserved 164;
|
||||
reserved 166 to 169;
|
||||
reserved 175 to 185;
|
||||
reserved 188 to 195;
|
||||
reserved 197;
|
||||
reserved 198 to 202;
|
||||
reserved 205 to 206;
|
||||
reserved 221;
|
||||
reserved 224 to 231;
|
||||
reserved 234 to 236;
|
||||
reserved 239 to 240;
|
||||
reserved 244;
|
||||
reserved 246 to 256;
|
||||
reserved 259;
|
||||
reserved 270;
|
||||
reserved 280 to 281;
|
||||
reserved 332 to 333;
|
||||
reserved 394 to 396;
|
||||
reserved 429 to 430;
|
||||
reserved 211 to 216, 232 to 233;
|
||||
reserved 397 to 398;
|
||||
}
|
||||
|
||||
message Hello {
|
||||
PeerId peer_id = 1;
|
||||
}
|
||||
|
||||
message Ping {}
|
||||
|
||||
message Ack {}
|
||||
|
||||
message Error {
|
||||
string message = 1;
|
||||
ErrorCode code = 2;
|
||||
repeated string tags = 3;
|
||||
}
|
||||
|
||||
enum ErrorCode {
|
||||
Internal = 0;
|
||||
NoSuchChannel = 1;
|
||||
Disconnected = 2;
|
||||
SignedOut = 3;
|
||||
UpgradeRequired = 4;
|
||||
Forbidden = 5;
|
||||
NeedsCla = 7;
|
||||
NotARootChannel = 8;
|
||||
BadPublicNesting = 9;
|
||||
CircularNesting = 10;
|
||||
WrongMoveTarget = 11;
|
||||
UnsharedItem = 12;
|
||||
NoSuchProject = 13;
|
||||
DevServerProjectPathDoesNotExist = 16;
|
||||
RemoteUpgradeRequired = 17;
|
||||
RateLimitExceeded = 18;
|
||||
CommitFailed = 19;
|
||||
reserved 6;
|
||||
reserved 14 to 15;
|
||||
}
|
||||
|
||||
message EndStream {}
|
||||
|
||||
message Test {
|
||||
uint64 id = 1;
|
||||
}
|
||||
|
||||
message FlushBufferedMessages {}
|
||||
|
||||
message FlushBufferedMessagesResponse {}
|
||||
|
||||
message RemoteStarted {}
|
||||
|
||||
message SpawnKernel {
|
||||
string kernel_name = 1;
|
||||
string working_directory = 2;
|
||||
uint64 project_id = 3;
|
||||
string command = 4;
|
||||
repeated string args = 5;
|
||||
}
|
||||
|
||||
message SpawnKernelResponse {
|
||||
string kernel_id = 1;
|
||||
string connection_file = 2;
|
||||
}
|
||||
|
||||
message KillKernel {
|
||||
string kernel_id = 1;
|
||||
uint64 project_id = 2;
|
||||
}
|
||||
256
crates/proto/src/error.rs
Normal file
256
crates/proto/src/error.rs
Normal file
@@ -0,0 +1,256 @@
|
||||
/// Some helpers for structured error handling.
|
||||
///
|
||||
/// The helpers defined here allow you to pass type-safe error codes from
|
||||
/// the collab server to the client; and provide a mechanism for additional
|
||||
/// structured data alongside the message.
|
||||
///
|
||||
/// When returning an error, it can be as simple as:
|
||||
///
|
||||
/// `return Err(Error::Forbidden.into())`
|
||||
///
|
||||
/// If you'd like to log more context, you can set a message. These messages
|
||||
/// show up in our logs, but are not shown visibly to users.
|
||||
///
|
||||
/// `return Err(Error::Forbidden.message("not an admin").into())`
|
||||
///
|
||||
/// If you'd like to provide enough context that the UI can render a good error
|
||||
/// message (or would be helpful to see in a structured format in the logs), you
|
||||
/// can use .with_tag():
|
||||
///
|
||||
/// `return Err(Error::WrongReleaseChannel.with_tag("required", "stable").into())`
|
||||
///
|
||||
/// When handling an error you can use .error_code() to match which error it was
|
||||
/// and .error_tag() to read any tags.
|
||||
///
|
||||
/// ```ignore
|
||||
/// use proto::{ErrorCode, ErrorExt};
|
||||
///
|
||||
/// match err.error_code() {
|
||||
/// ErrorCode::Forbidden => alert("I'm sorry I can't do that."),
|
||||
/// ErrorCode::WrongReleaseChannel =>
|
||||
/// alert(format!("You need to be on the {} release channel.", err.error_tag("required").unwrap())),
|
||||
/// ErrorCode::Internal => alert("Sorry, something went wrong"),
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
pub use crate::ErrorCode;
|
||||
|
||||
/// ErrorCodeExt provides some helpers for structured error handling.
|
||||
///
|
||||
/// The primary implementation is on the proto::ErrorCode to easily convert
|
||||
/// that into an anyhow::Error, which we use pervasively.
|
||||
///
|
||||
/// The RpcError struct provides support for further metadata if needed.
|
||||
pub trait ErrorCodeExt {
|
||||
/// Return an anyhow::Error containing this.
|
||||
/// (useful in places where .into() doesn't have enough type information)
|
||||
fn anyhow(self) -> anyhow::Error;
|
||||
|
||||
/// Add a message to the error (by default the error code is used)
|
||||
fn message(self, msg: String) -> RpcError;
|
||||
|
||||
/// Add a tag to the error. Tags are key value pairs that can be used
|
||||
/// to send semi-structured data along with the error.
|
||||
fn with_tag(self, k: &str, v: &str) -> RpcError;
|
||||
}
|
||||
|
||||
impl ErrorCodeExt for ErrorCode {
|
||||
fn anyhow(self) -> anyhow::Error {
|
||||
self.into()
|
||||
}
|
||||
|
||||
fn message(self, msg: String) -> RpcError {
|
||||
let err: RpcError = self.into();
|
||||
err.message(msg)
|
||||
}
|
||||
|
||||
fn with_tag(self, k: &str, v: &str) -> RpcError {
|
||||
let err: RpcError = self.into();
|
||||
err.with_tag(k, v)
|
||||
}
|
||||
}
|
||||
|
||||
/// ErrorExt provides helpers for structured error handling.
|
||||
///
|
||||
/// The primary implementation is on the anyhow::Error, which is
|
||||
/// what we use throughout our codebase. Though under the hood this
|
||||
pub trait ErrorExt {
|
||||
/// error_code() returns the ErrorCode (or ErrorCode::Internal if there is none)
|
||||
fn error_code(&self) -> ErrorCode;
|
||||
/// error_tag() returns the value of the tag with the given key, if any.
|
||||
fn error_tag(&self, k: &str) -> Option<&str>;
|
||||
/// to_proto() converts the error into a crate::Error
|
||||
fn to_proto(&self) -> crate::Error;
|
||||
/// Clones the error and turns into an [anyhow::Error].
|
||||
fn cloned(&self) -> anyhow::Error;
|
||||
}
|
||||
|
||||
impl ErrorExt for anyhow::Error {
|
||||
fn error_code(&self) -> ErrorCode {
|
||||
if let Some(rpc_error) = self.downcast_ref::<RpcError>() {
|
||||
rpc_error.code
|
||||
} else {
|
||||
ErrorCode::Internal
|
||||
}
|
||||
}
|
||||
|
||||
fn error_tag(&self, k: &str) -> Option<&str> {
|
||||
if let Some(rpc_error) = self.downcast_ref::<RpcError>() {
|
||||
rpc_error.error_tag(k)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
fn to_proto(&self) -> crate::Error {
|
||||
if let Some(rpc_error) = self.downcast_ref::<RpcError>() {
|
||||
rpc_error.to_proto()
|
||||
} else {
|
||||
ErrorCode::Internal
|
||||
.message(
|
||||
format!("{self:#}")
|
||||
.lines()
|
||||
.fold(String::new(), |mut message, line| {
|
||||
if !message.is_empty() {
|
||||
message.push(' ');
|
||||
}
|
||||
message.push_str(line);
|
||||
message
|
||||
}),
|
||||
)
|
||||
.to_proto()
|
||||
}
|
||||
}
|
||||
|
||||
fn cloned(&self) -> anyhow::Error {
|
||||
if let Some(rpc_error) = self.downcast_ref::<RpcError>() {
|
||||
rpc_error.cloned()
|
||||
} else {
|
||||
anyhow::anyhow!("{self:#}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<ErrorCode> for anyhow::Error {
|
||||
fn from(value: ErrorCode) -> Self {
|
||||
RpcError {
|
||||
request: None,
|
||||
code: value,
|
||||
msg: format!("{:?}", value),
|
||||
tags: Default::default(),
|
||||
}
|
||||
.into()
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct RpcError {
|
||||
request: Option<String>,
|
||||
msg: String,
|
||||
code: ErrorCode,
|
||||
tags: Vec<String>,
|
||||
}
|
||||
|
||||
/// RpcError is a structured error type that is returned by the collab server.
|
||||
/// In addition to a message, it lets you set a specific ErrorCode, and attach
|
||||
/// small amounts of metadata to help the client handle the error appropriately.
|
||||
///
|
||||
/// This struct is not typically used directly, as we pass anyhow::Error around
|
||||
/// in the app; however it is useful for chaining .message() and .with_tag() on
|
||||
/// ErrorCode.
|
||||
impl RpcError {
|
||||
/// Returns the raw server-provided error message without any RPC framing
|
||||
/// (e.g. without the "RPC request X failed: " prefix that `Display` adds).
|
||||
pub fn raw_message(&self) -> &str {
|
||||
&self.msg
|
||||
}
|
||||
|
||||
/// from_proto converts a crate::Error into an anyhow::Error containing
|
||||
/// an RpcError.
|
||||
pub fn from_proto(error: &crate::Error, request: &str) -> anyhow::Error {
|
||||
RpcError {
|
||||
request: Some(request.to_string()),
|
||||
code: error.code(),
|
||||
msg: error.message.clone(),
|
||||
tags: error.tags.clone(),
|
||||
}
|
||||
.into()
|
||||
}
|
||||
}
|
||||
|
||||
impl ErrorCodeExt for RpcError {
|
||||
fn message(mut self, msg: String) -> RpcError {
|
||||
self.msg = msg;
|
||||
self
|
||||
}
|
||||
|
||||
fn with_tag(mut self, k: &str, v: &str) -> RpcError {
|
||||
self.tags.push(format!("{}={}", k, v));
|
||||
self
|
||||
}
|
||||
|
||||
fn anyhow(self) -> anyhow::Error {
|
||||
self.into()
|
||||
}
|
||||
}
|
||||
|
||||
impl ErrorExt for RpcError {
|
||||
fn error_tag(&self, k: &str) -> Option<&str> {
|
||||
for tag in &self.tags {
|
||||
let mut parts = tag.split('=');
|
||||
if let Some(key) = parts.next()
|
||||
&& key == k
|
||||
{
|
||||
return parts.next();
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
fn error_code(&self) -> ErrorCode {
|
||||
self.code
|
||||
}
|
||||
|
||||
fn to_proto(&self) -> crate::Error {
|
||||
crate::Error {
|
||||
code: self.code as i32,
|
||||
message: self.msg.clone(),
|
||||
tags: self.tags.clone(),
|
||||
}
|
||||
}
|
||||
|
||||
fn cloned(&self) -> anyhow::Error {
|
||||
self.clone().into()
|
||||
}
|
||||
}
|
||||
|
||||
impl std::error::Error for RpcError {
|
||||
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Display for RpcError {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||
if let Some(request) = &self.request {
|
||||
write!(f, "RPC request {} failed: {}", request, self.msg)?
|
||||
} else {
|
||||
write!(f, "{}", self.msg)?
|
||||
}
|
||||
for tag in &self.tags {
|
||||
write!(f, " {}", tag)?
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl From<ErrorCode> for RpcError {
|
||||
fn from(code: ErrorCode) -> Self {
|
||||
RpcError {
|
||||
request: None,
|
||||
code,
|
||||
msg: format!("{:?}", code),
|
||||
tags: Default::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
100
crates/proto/src/macros.rs
Normal file
100
crates/proto/src/macros.rs
Normal file
@@ -0,0 +1,100 @@
|
||||
#[macro_export]
|
||||
macro_rules! messages {
|
||||
($(($name:ident, $priority:ident)),* $(,)?) => {
|
||||
pub fn build_typed_envelope(sender_id: PeerId, received_at: std::time::Instant, envelope: Envelope) -> Option<Box<dyn AnyTypedEnvelope>> {
|
||||
match envelope.payload {
|
||||
$(Some(envelope::Payload::$name(payload)) => {
|
||||
Some(Box::new(TypedEnvelope {
|
||||
sender_id,
|
||||
original_sender_id: envelope.original_sender_id,
|
||||
message_id: envelope.id,
|
||||
payload,
|
||||
received_at,
|
||||
}))
|
||||
}, )*
|
||||
_ => None
|
||||
}
|
||||
}
|
||||
|
||||
$(
|
||||
impl EnvelopedMessage for $name {
|
||||
const NAME: &'static str = std::stringify!($name);
|
||||
const PRIORITY: MessagePriority = MessagePriority::$priority;
|
||||
|
||||
fn into_envelope(
|
||||
self,
|
||||
id: u32,
|
||||
responding_to: Option<u32>,
|
||||
original_sender_id: Option<PeerId>,
|
||||
) -> Envelope {
|
||||
Envelope {
|
||||
id,
|
||||
responding_to,
|
||||
original_sender_id,
|
||||
payload: Some(envelope::Payload::$name(self)),
|
||||
ack_id: None,
|
||||
}
|
||||
}
|
||||
|
||||
fn from_envelope(envelope: Envelope) -> Option<Self> {
|
||||
if let Some(envelope::Payload::$name(msg)) = envelope.payload {
|
||||
Some(msg)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
)*
|
||||
};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! request_messages {
|
||||
($(($request_name:ident, $response_name:ident)),* $(,)?) => {
|
||||
$(impl RequestMessage for $request_name {
|
||||
type Response = $response_name;
|
||||
})*
|
||||
};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! entity_messages {
|
||||
({$id_field:ident, $entity_type:ty}, $($name:ident),* $(,)?) => {
|
||||
$(impl EntityMessage for $name {
|
||||
type Entity = $entity_type;
|
||||
|
||||
fn remote_entity_id(&self) -> u64 {
|
||||
self.$id_field
|
||||
}
|
||||
})*
|
||||
};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! lsp_messages {
|
||||
($(($request_name:ident, $response_name:ident, $stop_previous_requests:expr)),* $(,)?) => {
|
||||
$(impl LspRequestMessage for $request_name {
|
||||
type Response = $response_name;
|
||||
|
||||
fn to_proto_query(self) -> $crate::lsp_query::Request {
|
||||
$crate::lsp_query::Request::$request_name(self)
|
||||
}
|
||||
|
||||
fn response_to_proto_query(response: Self::Response) -> $crate::lsp_response::Response {
|
||||
$crate::lsp_response::Response::$response_name(response)
|
||||
}
|
||||
|
||||
fn buffer_id(&self) -> u64 {
|
||||
self.buffer_id
|
||||
}
|
||||
|
||||
fn buffer_version(&self) -> &[$crate::VectorClockEntry] {
|
||||
&self.version
|
||||
}
|
||||
|
||||
fn stop_previous_requests() -> bool {
|
||||
$stop_previous_requests
|
||||
}
|
||||
})*
|
||||
};
|
||||
}
|
||||
1040
crates/proto/src/proto.rs
Normal file
1040
crates/proto/src/proto.rs
Normal file
File diff suppressed because it is too large
Load Diff
210
crates/proto/src/typed_envelope.rs
Normal file
210
crates/proto/src/typed_envelope.rs
Normal file
@@ -0,0 +1,210 @@
|
||||
use crate::{Envelope, PeerId};
|
||||
use anyhow::{Context as _, Result};
|
||||
use serde::Serialize;
|
||||
use std::{
|
||||
any::{Any, TypeId},
|
||||
cmp,
|
||||
fmt::{self, Debug},
|
||||
};
|
||||
use std::{marker::PhantomData, time::Instant};
|
||||
|
||||
pub trait EnvelopedMessage: Clone + Debug + Serialize + Sized + Send + Sync + 'static {
|
||||
const NAME: &'static str;
|
||||
const PRIORITY: MessagePriority;
|
||||
fn into_envelope(
|
||||
self,
|
||||
id: u32,
|
||||
responding_to: Option<u32>,
|
||||
original_sender_id: Option<PeerId>,
|
||||
) -> Envelope;
|
||||
fn from_envelope(envelope: Envelope) -> Option<Self>;
|
||||
}
|
||||
|
||||
pub trait EntityMessage: EnvelopedMessage {
|
||||
type Entity;
|
||||
fn remote_entity_id(&self) -> u64;
|
||||
}
|
||||
|
||||
pub trait RequestMessage: EnvelopedMessage {
|
||||
type Response: EnvelopedMessage;
|
||||
}
|
||||
|
||||
/// A trait to bind LSP request and responses for the proto layer.
|
||||
/// Should be used for every LSP request that has to traverse through the proto layer.
|
||||
///
|
||||
/// `lsp_messages` macro in the same crate provides a convenient way to implement this.
|
||||
pub trait LspRequestMessage: EnvelopedMessage {
|
||||
type Response: EnvelopedMessage;
|
||||
|
||||
fn to_proto_query(self) -> crate::lsp_query::Request;
|
||||
|
||||
fn response_to_proto_query(response: Self::Response) -> crate::lsp_response::Response;
|
||||
|
||||
fn buffer_id(&self) -> u64;
|
||||
|
||||
fn buffer_version(&self) -> &[crate::VectorClockEntry];
|
||||
|
||||
/// Whether to deduplicate the requests, or keep the previous ones running when another
|
||||
/// request of the same kind is processed.
|
||||
fn stop_previous_requests() -> bool;
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub struct LspRequestId(pub u64);
|
||||
|
||||
/// A response from a single language server.
|
||||
/// There could be multiple responses for a single LSP request,
|
||||
/// from different servers.
|
||||
pub struct ProtoLspResponse<R> {
|
||||
pub server_id: u64,
|
||||
pub response: R,
|
||||
}
|
||||
|
||||
impl ProtoLspResponse<Box<dyn AnyTypedEnvelope>> {
|
||||
pub fn into_response<T: LspRequestMessage>(self) -> Result<ProtoLspResponse<T::Response>> {
|
||||
let envelope = self
|
||||
.response
|
||||
.into_any()
|
||||
.downcast::<TypedEnvelope<T::Response>>()
|
||||
.map_err(|_| {
|
||||
anyhow::anyhow!(
|
||||
"cannot downcast LspResponse to {} for message {}",
|
||||
T::Response::NAME,
|
||||
T::NAME,
|
||||
)
|
||||
})?;
|
||||
|
||||
Ok(ProtoLspResponse {
|
||||
server_id: self.server_id,
|
||||
response: envelope.payload,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
pub trait AnyTypedEnvelope: Any + Send + Sync {
|
||||
fn payload_type_id(&self) -> TypeId;
|
||||
fn payload_type_name(&self) -> &'static str;
|
||||
fn into_any(self: Box<Self>) -> Box<dyn Any + Send + Sync>;
|
||||
fn is_background(&self) -> bool;
|
||||
fn original_sender_id(&self) -> Option<PeerId>;
|
||||
fn sender_id(&self) -> PeerId;
|
||||
fn message_id(&self) -> u32;
|
||||
}
|
||||
|
||||
pub enum MessagePriority {
|
||||
Foreground,
|
||||
Background,
|
||||
}
|
||||
|
||||
impl<T: EnvelopedMessage> AnyTypedEnvelope for TypedEnvelope<T> {
|
||||
fn payload_type_id(&self) -> TypeId {
|
||||
TypeId::of::<T>()
|
||||
}
|
||||
|
||||
fn payload_type_name(&self) -> &'static str {
|
||||
T::NAME
|
||||
}
|
||||
|
||||
fn into_any(self: Box<Self>) -> Box<dyn Any + Send + Sync> {
|
||||
self
|
||||
}
|
||||
|
||||
fn is_background(&self) -> bool {
|
||||
matches!(T::PRIORITY, MessagePriority::Background)
|
||||
}
|
||||
|
||||
fn original_sender_id(&self) -> Option<PeerId> {
|
||||
self.original_sender_id
|
||||
}
|
||||
|
||||
fn sender_id(&self) -> PeerId {
|
||||
self.sender_id
|
||||
}
|
||||
|
||||
fn message_id(&self) -> u32 {
|
||||
self.message_id
|
||||
}
|
||||
}
|
||||
|
||||
impl PeerId {
|
||||
pub fn from_u64(peer_id: u64) -> Self {
|
||||
let owner_id = (peer_id >> 32) as u32;
|
||||
let id = peer_id as u32;
|
||||
Self { owner_id, id }
|
||||
}
|
||||
|
||||
pub fn as_u64(self) -> u64 {
|
||||
((self.owner_id as u64) << 32) | (self.id as u64)
|
||||
}
|
||||
}
|
||||
|
||||
impl Copy for PeerId {}
|
||||
|
||||
impl Eq for PeerId {}
|
||||
|
||||
impl Ord for PeerId {
|
||||
fn cmp(&self, other: &Self) -> cmp::Ordering {
|
||||
self.owner_id
|
||||
.cmp(&other.owner_id)
|
||||
.then_with(|| self.id.cmp(&other.id))
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialOrd for PeerId {
|
||||
fn partial_cmp(&self, other: &Self) -> Option<cmp::Ordering> {
|
||||
Some(self.cmp(other))
|
||||
}
|
||||
}
|
||||
|
||||
impl std::hash::Hash for PeerId {
|
||||
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
|
||||
self.owner_id.hash(state);
|
||||
self.id.hash(state);
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for PeerId {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "{}/{}", self.owner_id, self.id)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Receipt<T> {
|
||||
pub sender_id: PeerId,
|
||||
pub message_id: u32,
|
||||
payload_type: PhantomData<T>,
|
||||
}
|
||||
|
||||
impl<T> Clone for Receipt<T> {
|
||||
fn clone(&self) -> Self {
|
||||
*self
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Copy for Receipt<T> {}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct TypedEnvelope<T> {
|
||||
pub sender_id: PeerId,
|
||||
pub original_sender_id: Option<PeerId>,
|
||||
pub message_id: u32,
|
||||
pub payload: T,
|
||||
pub received_at: Instant,
|
||||
}
|
||||
|
||||
impl<T> TypedEnvelope<T> {
|
||||
pub fn original_sender_id(&self) -> Result<PeerId> {
|
||||
self.original_sender_id
|
||||
.context("missing original_sender_id")
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: RequestMessage> TypedEnvelope<T> {
|
||||
pub fn receipt(&self) -> Receipt<T> {
|
||||
Receipt {
|
||||
sender_id: self.sender_id,
|
||||
message_id: self.message_id,
|
||||
payload_type: PhantomData,
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user