use serde::{Deserialize, Serialize};
macro_rules! impl_json_debug {
( $($type:ty),* $(,)? ) => {
$(
impl ::std::fmt::Debug for $type {
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
let json = ::serde_json::to_string(self).expect("BUG: invalid message");
f.write_str(&json)
}
}
)*
};
}
pub mod ext;
pub mod jsonrpc;
pub mod transport;
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct InitializeParams {
pub process_id: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub client_info: Option<ClientInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub locale: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub root_path: Option<String>,
pub root_uri: Option<String>,
pub initialization_options: Option<InitializationOptions>,
pub capabilities: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub trace: Option<TraceValue>,
#[serde(skip_serializing_if = "Vec::is_empty", default = "Vec::new")]
pub workspace_folders: Vec<WorkspaceFolder>,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct ClientInfo {
pub name: String,
pub version: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Default)]
#[serde(rename_all = "camelCase")]
pub struct InitializationOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub lsp_mux: Option<ext::LspMuxOptions>,
#[serde(flatten)]
pub other_options: serde_json::Map<String, serde_json::Value>,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub enum TraceValue {
Off,
Messages,
Verbose,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct WorkspaceFolder {
pub uri: String,
pub name: String,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct InitializeResult {
capabilities: serde_json::Value,
#[serde(skip_serializing_if = "Option::is_none")]
server_info: Option<ServerInfo>,
}
#[derive(Serialize, Deserialize, Clone)]
pub struct ServerInfo {
name: String,
version: Option<String>,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct RegistrationParams {
pub registrations: Vec<Registration>,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct Registration {
pub id: String,
pub method: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub register_options: Option<serde_json::Value>,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct UnregistrationParams {
#[serde(rename = "unregisterations")]
pub unregistrations: Vec<Unregistration>,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct Unregistration {
pub id: String,
pub method: String,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct DidOpenTextDocumentParams {
pub text_document: TextDocumentItem,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct TextDocumentItem {
pub uri: String,
pub language_id: String,
pub version: u64,
pub text: String,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct DidCloseTextDocumentParams {
pub text_document: TextDocumentIdentifier,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct TextDocumentIdentifier {
pub uri: String,
}