Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/proc-macro-api/src/bidirectional_protocol/msg.rs')
-rw-r--r--crates/proc-macro-api/src/bidirectional_protocol/msg.rs95
1 files changed, 95 insertions, 0 deletions
diff --git a/crates/proc-macro-api/src/bidirectional_protocol/msg.rs b/crates/proc-macro-api/src/bidirectional_protocol/msg.rs
new file mode 100644
index 0000000000..e41f8a5d7d
--- /dev/null
+++ b/crates/proc-macro-api/src/bidirectional_protocol/msg.rs
@@ -0,0 +1,95 @@
+//! Bidirectional protocol messages
+
+use paths::Utf8PathBuf;
+use serde::{Deserialize, Serialize};
+
+use crate::{
+ ProcMacroKind,
+ legacy_protocol::msg::{FlatTree, Message, PanicMessage, ServerConfig},
+};
+
+#[derive(Debug, Serialize, Deserialize)]
+pub enum SubRequest {
+ FilePath { file_id: u32 },
+ SourceText { file_id: u32, ast_id: u32, start: u32, end: u32 },
+ LocalFilePath { file_id: u32 },
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub enum SubResponse {
+ FilePathResult { name: String },
+ SourceTextResult { text: Option<String> },
+ LocalFilePathResult { name: Option<String> },
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub enum BidirectionalMessage {
+ Request(Request),
+ Response(Response),
+ SubRequest(SubRequest),
+ SubResponse(SubResponse),
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub enum Request {
+ ListMacros { dylib_path: Utf8PathBuf },
+ ExpandMacro(Box<ExpandMacro>),
+ ApiVersionCheck {},
+ SetConfig(ServerConfig),
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub enum Response {
+ ListMacros(Result<Vec<(String, ProcMacroKind)>, String>),
+ ExpandMacro(Result<FlatTree, PanicMessage>),
+ ApiVersionCheck(u32),
+ SetConfig(ServerConfig),
+ ExpandMacroExtended(Result<ExpandMacroExtended, PanicMessage>),
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct ExpandMacro {
+ pub lib: Utf8PathBuf,
+ pub env: Vec<(String, String)>,
+ pub current_dir: Option<String>,
+ #[serde(flatten)]
+ pub data: ExpandMacroData,
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct ExpandMacroExtended {
+ pub tree: FlatTree,
+ pub span_data_table: Vec<u32>,
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct ExpandMacroData {
+ pub macro_body: FlatTree,
+ pub macro_name: String,
+ pub attributes: Option<FlatTree>,
+ #[serde(skip_serializing_if = "ExpnGlobals::skip_serializing_if")]
+ #[serde(default)]
+ pub has_global_spans: ExpnGlobals,
+
+ #[serde(skip_serializing_if = "Vec::is_empty")]
+ #[serde(default)]
+ pub span_data_table: Vec<u32>,
+}
+
+#[derive(Clone, Copy, Default, Debug, Serialize, Deserialize)]
+pub struct ExpnGlobals {
+ #[serde(skip_serializing)]
+ #[serde(default)]
+ pub serialize: bool,
+ pub def_site: usize,
+ pub call_site: usize,
+ pub mixed_site: usize,
+}
+
+impl ExpnGlobals {
+ fn skip_serializing_if(&self) -> bool {
+ !self.serialize
+ }
+}
+
+impl Message for BidirectionalMessage {}