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}