use serde::Serialize;
use super::{enums::SeverityReasonType, SeverityReasonAttribute};
#[derive(Clone, Debug, Default, Serialize, Eq, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SeverityReason {
#[serde(rename(serialize = "type"))]
pub severity_reason_type: Option<SeverityReasonType>,
pub attributes: Option<SeverityReasonAttribute>,
pub unhandled_overridden: Option<bool>,
}
#[cfg_attr(docsrs, doc(cfg(feature = "optional-builders")))]
#[cfg(feature = "optional-builders")]
impl SeverityReason {
pub fn builder() -> SeverityReasonBuilder {
SeverityReasonBuilder {
severity_reason: SeverityReason {
severity_reason_type: None,
attributes: None,
unhandled_overridden: None,
},
}
}
}
#[cfg_attr(docsrs, doc(cfg(feature = "optional-builders")))]
#[cfg(feature = "optional-builders")]
pub struct SeverityReasonBuilder {
severity_reason: SeverityReason,
}
#[cfg_attr(docsrs, doc(cfg(feature = "optional-builders")))]
#[cfg(feature = "optional-builders")]
impl SeverityReasonBuilder {
pub fn set_severity_reason_type(
&mut self,
severity_reason_type: impl Into<Option<SeverityReasonType>>,
) -> &mut Self {
self.severity_reason.severity_reason_type = severity_reason_type.into();
self
}
pub fn set_attributes(
&mut self,
attributes: impl Into<Option<SeverityReasonAttribute>>,
) -> &mut Self {
self.severity_reason.attributes = attributes.into();
self
}
pub fn set_unhandled_overridden(
&mut self,
unhandled_overridden: impl Into<Option<bool>>,
) -> &mut Self {
self.severity_reason.unhandled_overridden = unhandled_overridden.into();
self
}
pub fn build(&self) -> SeverityReason {
self.severity_reason.clone()
}
}
#[cfg(test)]
mod test {
#[cfg(feature = "optional-builders")]
#[test]
pub fn test_error_payload_events_severity_reason_builder() {
use crate::error::payload::events::enums::SeverityReasonType;
use crate::error::payload::events::SeverityReason;
use crate::error::payload::events::SeverityReasonAttribute;
let severity_reason_attribute = SeverityReasonAttribute {
error_class: "Car".to_string().into(),
error_type: "Sparkplug".to_string().into(),
exception_class: "Engine".to_string().into(),
framework: "Unibody".to_string().into(),
level: "Coupe".to_string().into(),
signal_type: "Left".to_string().into(),
violation_type: "Moving".to_string().into(),
};
let mut severity_reason_builder = SeverityReason::builder();
let test_severity_reason = SeverityReason {
severity_reason_type: SeverityReasonType::AppHang.into(),
attributes: severity_reason_attribute.clone().into(),
unhandled_overridden: true.into(),
};
let severity_reason = severity_reason_builder
.set_severity_reason_type(
test_severity_reason.severity_reason_type.clone(),
)
.set_attributes(test_severity_reason.attributes.clone())
.set_unhandled_overridden(
test_severity_reason.unhandled_overridden.clone(),
)
.build();
assert_eq!(severity_reason, test_severity_reason);
}
}