use serde::{Deserialize, Serialize};
use strum::Display;
#[derive(Display, Serialize, Deserialize, PartialEq, Eq, Debug)]
pub enum Part {
#[strum(serialize = "json body")]
#[serde(rename = "json body")]
JsonBody,
#[strum(serialize = "json path")]
#[serde(rename = "json path")]
JsonPath,
#[strum(serialize = "headers")]
#[serde(rename = "headers")]
Headers,
#[strum(serialize = "header")]
#[serde(rename = "header")]
Header,
#[strum(serialize = "status code")]
#[serde(rename = "status code")]
StatusCode,
#[strum(serialize = "response time")]
#[serde(rename = "response time")]
ResponseTime,
#[strum(serialize = "none")]
#[serde(rename = "none")]
NoPart,
}
#[cfg(test)]
pub mod tests {
use super::Part;
use serde_json::Value;
use test_case::test_case;
#[test_case(Value::String(String::from("json body")), Part::JsonBody; "Failed to deserialize part JsonBody")]
#[test_case(Value::String(String::from("headers")), Part::Headers; "Failed to deserialize part Headers")]
#[test_case(Value::String(String::from("header")), Part::Header; "Failed to deserialize part Header")]
#[test_case(Value::String(String::from("status code")), Part::StatusCode; "Failed to deserialize part StatusCode")]
#[test_case(Value::String(String::from("response time")), Part::ResponseTime; "Failed to deserialize part ResponseTime")]
#[test_case(Value::String(String::from("json path")), Part::JsonPath; "Failed to deserialize part JsonPath")]
fn deser_part(json_part: Value, part: Part) {
assert_eq!(serde_json::from_value::<Part>(json_part).unwrap(), part)
}
}