| //! 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 {} |