use serde::{Deserialize, Serialize};
use crate::documents::kaskade::ParticipantMrid;
use crate::types::{Mrid, SimpleContent, UtcDateTime};
pub const NAMESPACE: &str = "urn:iec62325.351:tc57wg16:451-5:statusrequestdocument:4:1";
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum StatusRequestDocType {
#[serde(rename = "A60")]
StatusRequest,
#[serde(rename = "Z15")]
CatalogueRequest,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum StatusRequestSenderRole {
#[serde(rename = "A18")]
GridOperator,
#[serde(rename = "A39")]
DataProvider,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum StatusRequestReceiverRole {
#[serde(rename = "A18")]
GridOperator,
#[serde(rename = "A27")]
ResourceProvider,
#[serde(rename = "Z01")]
Other,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum ParticipantStatus {
#[serde(rename = "A03")]
Deactivated,
#[serde(rename = "A04")]
Reactivated,
#[serde(rename = "A13")]
Withdrawn,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct StatusRequestSenderMarketRole {
#[serde(rename = "type")]
pub role_type: StatusRequestSenderRole,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct StatusRequestReceiverMarketRole {
#[serde(rename = "type")]
pub role_type: StatusRequestReceiverRole,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct StatusRequestSender {
#[serde(rename = "mRID")]
pub m_rid: ParticipantMrid,
#[serde(rename = "marketRole")]
pub market_role: StatusRequestSenderMarketRole,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct StatusRequestReceiver {
#[serde(rename = "mRID")]
pub m_rid: ParticipantMrid,
#[serde(rename = "marketRole")]
pub market_role: StatusRequestReceiverMarketRole,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct AttributeInstanceComponent {
#[serde(rename = "attribute")]
pub attribute: String,
#[serde(
rename = "attributeValue",
default,
skip_serializing_if = "Option::is_none"
)]
pub attribute_value: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct MktActivityRecord {
#[serde(rename = "MarketParticipant.mRID")]
pub market_participant_m_rid: SimpleContent<String>,
pub status: ParticipantStatus,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename = "StatusRequest_MarketDocument")]
pub struct StatusRequestMarketDocument {
#[serde(rename = "mRID")]
pub m_rid: Mrid,
#[serde(rename = "type")]
pub doc_type: StatusRequestDocType,
#[serde(rename = "sender_MarketParticipant")]
pub sender_market_participant: StatusRequestSender,
#[serde(rename = "receiver_MarketParticipant")]
pub receiver_market_participant: StatusRequestReceiver,
#[serde(rename = "createdDateTime")]
pub created_date_time: UtcDateTime,
#[serde(
rename = "AttributeInstanceComponent",
default,
skip_serializing_if = "Vec::is_empty"
)]
pub attributes: Vec<AttributeInstanceComponent>,
#[serde(
rename = "MktActivityRecord",
default,
skip_serializing_if = "Vec::is_empty"
)]
pub mkt_activity_records: Vec<MktActivityRecord>,
}