use super::{
Characteristic, ContextUpdate, ExternalIdentifier, Feature, IntentRefOrValue,
RelatedEntityRefOrValue, RelatedPartyRefOrPartyRoleRef, RelatedPlaceRefOrValue,
RelatedServiceOrderItem, ResourceRef, ServiceOperatingStatusType, ServiceRefOrValue,
ServiceRelationship, ServiceSpecificationRef, ServiceStateType,
};
use serde::{Deserialize, Serialize};
use crate::common::entity::Entity;
use crate::common::note::Note;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Service {
#[serde(flatten)]
pub entity: Entity,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub category: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(rename = "endDate")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub end_date: Option<crate::DateTime>,
#[serde(rename = "externalIdentifier")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub external_identifier: Vec<ExternalIdentifier>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub feature: Vec<Feature>,
#[serde(rename = "hasStarted")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub has_started: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub intent: Option<IntentRefOrValue>,
#[serde(rename = "isBundle")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub is_bundle: Option<bool>,
#[serde(rename = "isServiceEnabled")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub is_service_enabled: Option<bool>,
#[serde(rename = "isStateful")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub is_stateful: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub note: Vec<Note>,
#[serde(rename = "operatingStatus")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub operating_status: Option<ServiceOperatingStatusType>,
#[serde(rename = "operatingStatusContextUpdate")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub operating_status_context_update: Option<ContextUpdate>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub place: Vec<RelatedPlaceRefOrValue>,
#[serde(rename = "relatedEntity")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub related_entity: Vec<RelatedEntityRefOrValue>,
#[serde(rename = "relatedParty")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub related_party: Vec<RelatedPartyRefOrPartyRoleRef>,
#[serde(rename = "serviceCharacteristic")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub service_characteristic: Vec<Characteristic>,
#[serde(rename = "serviceDate")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub service_date: Option<String>,
#[serde(rename = "serviceOrderItem")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub service_order_item: Vec<RelatedServiceOrderItem>,
#[serde(rename = "serviceRelationship")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub service_relationship: Vec<ServiceRelationship>,
#[serde(rename = "serviceSpecification")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub service_specification: Option<ServiceSpecificationRef>,
#[serde(rename = "serviceType")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub service_type: Option<String>,
#[serde(rename = "startDate")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub start_date: Option<crate::DateTime>,
#[serde(rename = "startMode")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub start_mode: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub state: Option<ServiceStateType>,
#[serde(rename = "supportingResource")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub supporting_resource: Vec<ResourceRef>,
#[serde(rename = "supportingService")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub supporting_service: Vec<ServiceRefOrValue>,
}
impl std::fmt::Display for Service {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
impl std::ops::Deref for Service {
type Target = Entity;
fn deref(&self) -> &Self::Target {
&self.entity
}
}
impl std::ops::DerefMut for Service {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.entity
}
}