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<String>, | |
} | |
#[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"]"#, | |
); | |
} | |
} |