sync_lsp/window/log_message.rs
1//! mplementation of `window/logMessage` notification.
2//!
3//! # Usage
4//! When using this crate a logger for the `log` crate will be set up automatically.
5//! User of this library should never use `println!()` or `eprintln!()` as they will
6//! interfere with the stdio transport. All log macros are forwarded to [`Connection::log_message`]
7//! ```
8//! use log::{debug, info, warn, error};
9//! error!("This is an error message");
10//! warn!("This is a warning message");
11//! info!("This is an info message");
12//! debug!("This is a debug message and will therefore not be shown on release builds");
13//! ```
14
15use serde::Serialize;
16use crate::{Connection, TypeProvider};
17use crate::connection::RpcConnection;
18
19use super::MessageType;
20
21#[derive(Default)]
22pub(super) struct LogMessage;
23
24#[derive(Serialize)]
25struct LogMessageParams {
26 #[serde(rename = "type")]
27 r#type: MessageType,
28 message: String,
29}
30
31impl<T: TypeProvider> Connection<T> {
32
33 /// This notification may be used to [log](self) to a console on the client side.
34 ///
35 /// # Arguments
36 /// * `r#type` - The type of log message.
37 /// * `message` - The message to log.
38
39 pub fn log_message(&mut self, r#type: MessageType, message: String) {
40 self.notify(
41 LogMessage::METHOD,
42 LogMessageParams {
43 r#type,
44 message
45 }
46 );
47 }
48}
49
50impl LogMessage {
51 const METHOD: &'static str = "window/logMessage";
52}