sync_lsp/window/
mod.rs

1//! This module contains functionality centered arround logging and ui features.
2
3use serde_repr::Serialize_repr;
4
5use crate::{Server, TypeProvider};
6use crate::connection::Callback;
7
8use self::log_message::LogMessage;
9use self::show_message::ShowMessage;
10use self::show_message_request::ShowMessageRequest;
11use self::telemetry::Telemetry;
12
13pub mod show_message;
14pub mod log_message;
15pub mod telemetry;
16pub mod show_message_request;
17
18/// This struct contains all window endpoints, which are mainly used to resolve callbacks.
19pub(super) struct WindowService<T: TypeProvider> {
20    #[allow(unused)]
21    show_message: ShowMessage,
22    show_message_request: ShowMessageRequest<T>,
23    #[allow(unused)]
24    log_message: LogMessage,
25    #[allow(unused)]
26    telemetry: Telemetry,
27}
28
29/// The priority of a message which is either logged or shown to the user.
30/// On debug builds, all messages are shown.
31/// On release builds, only messages with a priority of `Info` or higher are shown.
32#[repr(i32)]
33#[derive(Serialize_repr, Debug)]
34pub enum MessageType {
35    Error = 1,
36    Warning = 2,
37    Info = 3,
38    Log = 4,
39}
40
41impl<T: TypeProvider> WindowService<T> {
42    pub(super) fn resolve(&self, method: &str) -> Option<Callback<Server<T>>> {
43        match method {
44            ShowMessageRequest::<T>::METHOD => Some(self.show_message_request.callback()),
45            _ => None
46        }
47    }
48}
49
50impl<T: TypeProvider> Default for WindowService<T> {
51    fn default() -> Self {
52        Self {
53            show_message: ShowMessage::default(),
54            show_message_request: ShowMessageRequest::default(),
55            log_message: LogMessage::default(),
56            telemetry: Telemetry::default(),
57        }
58    }
59}