use serde::{Serialize, Deserialize};
use super::{
Characteristic, EventRef, ExternalIdentifier, ImpactPattern, RelatedEntity,
RelatedParty, RelatedPlace, ResourceAlarmRef, ResourceRef, ServiceProblemRef,
ServiceProblemStateType, ServiceRef, SlaViolationRef, TroubleTicketRef,
};
use crate::common::note::Note;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ServiceProblemUpdate {
#[serde(rename = "@baseType")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub base_type: Option<String>,
#[serde(rename = "@schemaLocation")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub schema_location: Option<String>,
#[serde(rename = "@type")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub type_: Option<String>,
#[serde(rename = "affectedNumberOfServices")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub affected_number_of_services: Option<i64>,
#[serde(rename = "affectedResource")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub affected_resource: Option<Vec<ResourceRef>>,
#[serde(rename = "affectedService")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub affected_service: Option<Vec<ServiceRef>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub category: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub characteristic: Option<Vec<Characteristic>>,
#[serde(rename = "creationDate")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub creation_date: Option<crate::DateTime>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(rename = "externalIdentifier")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub external_identifier: Option<Vec<ExternalIdentifier>>,
#[serde(rename = "impactImportanceFactor")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub impact_importance_factor: Option<String>,
#[serde(rename = "impactPattern")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub impact_pattern: Option<ImpactPattern>,
#[serde(rename = "lastUpdate")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub last_update: Option<crate::DateTime>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub note: Option<Vec<Note>>,
#[serde(rename = "originatorParty")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub originator_party: Option<RelatedParty>,
#[serde(rename = "parentProblem")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub parent_problem: Option<Vec<ServiceProblemRef>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub place: Option<Vec<RelatedPlace>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub priority: Option<i64>,
#[serde(rename = "problemEscalation")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub problem_escalation: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
#[serde(rename = "relatedEntity")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub related_entity: Option<Vec<RelatedEntity>>,
#[serde(rename = "relatedEvent")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub related_event: Option<Vec<EventRef>>,
#[serde(rename = "relatedParty")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub related_party: Option<Vec<RelatedParty>>,
#[serde(rename = "resolutionDate")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resolution_date: Option<crate::DateTime>,
#[serde(rename = "responsibleParty")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub responsible_party: Option<RelatedParty>,
#[serde(rename = "rootCauseResource")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub root_cause_resource: Option<Vec<ResourceRef>>,
#[serde(rename = "rootCauseService")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub root_cause_service: Option<Vec<ServiceRef>>,
#[serde(rename = "slaViolation")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sla_violation: Option<Vec<SlaViolationRef>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub status: Option<ServiceProblemStateType>,
#[serde(rename = "statusChangeDate")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub status_change_date: Option<crate::DateTime>,
#[serde(rename = "statusChangeReason")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub status_change_reason: Option<String>,
#[serde(rename = "troubleTicket")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub trouble_ticket: Option<Vec<TroubleTicketRef>>,
#[serde(rename = "underlyingAlarm")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub underlying_alarm: Option<Vec<ResourceAlarmRef>>,
#[serde(rename = "underlyingProblem")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub underlying_problem: Option<Vec<ServiceProblemRef>>,
}
impl std::fmt::Display for ServiceProblemUpdate {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}