csskit_lsp/jsonrpc/
request.rs1use serde::{Deserialize, Serialize};
2use serde_json::{Value, to_value};
3
4use super::Id;
5
6#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
10pub struct Request {
11 pub id: Id,
12 pub method: String,
13 #[serde(default = "serde_json::Value::default", skip_serializing_if = "serde_json::Value::is_null")]
14 pub params: Value,
15}
16
17impl Request {
18 pub fn new<T>(id: Id, params: T::Params) -> Request
19 where
20 T: lsp_types::request::Request,
21 {
22 Request { id, method: T::METHOD.into(), params: to_value(params).unwrap() }
23 }
24}
25
26#[cfg(test)]
27mod tests {
28 use lsp_types::request::{Initialize, Request as RequestTrait};
29
30 use super::*;
31
32 #[test]
33 fn test_request_deserialize() {
34 assert_eq!(
35 serde_json::from_str::<Request>(r#"{"id":0, "method": "initialize", "params": null}"#).unwrap(),
36 Request { id: 0.into(), params: Value::Null, method: Initialize::METHOD.into() }
37 );
38 }
39}