use serde::{Deserialize, Serialize}; #[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] pub struct SetTraceParams { /// The new value that should be assigned to the trace setting. pub value: TraceValue, } /// A TraceValue represents the level of verbosity with which the server systematically /// reports its execution trace using `LogTrace` notifications. /// /// The initial trace value is set by the client at initialization and can be modified /// later using the `SetTrace` notification. #[derive(Debug, Eq, PartialEq, Clone, Copy, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub enum TraceValue { /// The server should not send any `$/logTrace` notification Off, /// The server should not add the 'verbose' field in the `LogTraceParams` Messages, Verbose, } impl Default for TraceValue { fn default() -> TraceValue { TraceValue::Off } } #[derive(Debug, Eq, PartialEq, Clone, 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, } #[cfg(test)] mod tests { use super::*; use crate::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"]"#, ); } }