use serde::{Deserialize, Serialize};
use crate::server::lsp::{
LspMessage,
rpc::{RequestId, RequestMessageBase, ResponseMessageBase},
textdocument::{Range, TextDocumentIdentifier},
};
#[derive(Debug, Deserialize, PartialEq)]
pub struct SemanticTokensFullRequest {
#[serde(flatten)]
pub base: RequestMessageBase,
pub params: SemanticTokensParams,
}
#[derive(Debug, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SemanticTokensParams {
pub text_document: TextDocumentIdentifier,
}
#[derive(Debug, Deserialize, PartialEq)]
pub struct SemanticTokensRangeRequest {
#[serde(flatten)]
pub base: RequestMessageBase,
pub params: SemanticTokensRangeParams,
}
#[derive(Debug, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SemanticTokensRangeParams {
pub text_document: TextDocumentIdentifier,
pub range: Range,
}
#[derive(Debug, Serialize, PartialEq)]
pub struct SemanticTokensFullResponse {
#[serde(flatten)]
base: ResponseMessageBase,
result: Option<SemanticTokens>,
}
impl SemanticTokensFullResponse {
pub fn new(id: &RequestId, data: Vec<u32>) -> Self {
SemanticTokensFullResponse {
base: ResponseMessageBase::success(id),
result: Some(SemanticTokens {
result_id: None,
data,
}),
}
}
}
impl LspMessage for SemanticTokensFullResponse {}
#[derive(Debug, Serialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SemanticTokens {
result_id: Option<String>,
data: Vec<u32>,
}