lsp_proxy/
processed_message.rs

1use crate::{Message, message::Direction};
2
3#[derive(Debug)]
4pub enum ProcessedMessage {
5    Forward(Message),
6    WithMessages {
7        message: Message,
8        generated_messages: Vec<(Direction, Message)>,
9    },
10    Ignore {
11        generated_messages: Vec<(Direction, Message)>,
12    },
13}
14
15impl ProcessedMessage {
16    pub fn get_message(&self) -> Option<&Message> {
17        match self {
18            ProcessedMessage::Forward(msg) => Some(msg),
19            ProcessedMessage::WithMessages { message, .. } => Some(message),
20            ProcessedMessage::Ignore { .. } => None,
21        }
22    }
23
24    pub fn get_generated_messages(&self) -> &[(Direction, Message)] {
25        match self {
26            ProcessedMessage::Forward(_) => &[],
27            ProcessedMessage::WithMessages {
28                generated_messages, ..
29            }
30            | ProcessedMessage::Ignore { generated_messages } => generated_messages,
31        }
32    }
33
34    pub fn into_parts(self) -> (Option<Message>, Vec<(Direction, Message)>) {
35        match self {
36            ProcessedMessage::Forward(msg) => (Some(msg), Vec::new()),
37            ProcessedMessage::WithMessages {
38                message,
39                generated_messages,
40            } => (Some(message), generated_messages),
41            ProcessedMessage::Ignore { generated_messages } => (None, generated_messages),
42        }
43    }
44}