laburnum 1.17.1

An LSP framework for building language servers and compilers, powered by an incremental query tree with content-addressed storage, task-based dataflow, and parallel queries.
Documentation
// Copyright Two Neutron Stars Incorporated and contributors
// SPDX-License-Identifier: BlueOak-1.0.0

use {
  crate::protocol::lsp::TraceValue,
  serde::{
    Deserialize,
    Serialize,
  },
};

#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
pub struct SetTraceParams {
  /// The new value that should be assigned to the trace setting.
  pub value: TraceValue,
}

#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct LogTraceParams {
  /// The message to be logged.
  pub message: String,
  /// Additional information that can be computed if the `trace` configuration
  /// is set to `verbose`
  #[serde(skip_serializing_if = "Option::is_none")]
  pub verbose: Option<String>,
}

#[cfg(test)]
mod tests {
  use {
    super::*,
    crate::protocol::tests::test_serialization,
  };

  #[test]
  fn test_set_trace_params() {
    test_serialization(
      &SetTraceParams {
        value: TraceValue::Off,
      },
      r#"{"value":"off"}"#,
    );
  }

  #[test]
  fn test_log_trace_params() {
    test_serialization(
      &LogTraceParams {
        message: "message".into(),
        verbose: None,
      },
      r#"{"message":"message"}"#,
    );

    test_serialization(
      &LogTraceParams {
        message: "message".into(),
        verbose: Some("verbose".into()),
      },
      r#"{"message":"message","verbose":"verbose"}"#,
    );
  }

  #[test]
  fn test_trace_value() {
    test_serialization(
      &vec![TraceValue::Off, TraceValue::Messages, TraceValue::Verbose],
      r#"["off","messages","verbose"]"#,
    );
  }
}