redispatch_xml/documents/
status_request.rs1use serde::{Deserialize, Serialize};
2
3use crate::documents::kaskade::ParticipantMrid;
4use crate::types::{Mrid, SimpleContent, UtcDateTime};
5
6pub const NAMESPACE: &str = "urn:iec62325.351:tc57wg16:451-5:statusrequestdocument:4:1";
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
15pub enum StatusRequestDocType {
16 #[serde(rename = "A60")]
18 StatusRequest,
19 #[serde(rename = "Z15")]
21 CatalogueRequest,
22}
23
24#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
26pub enum StatusRequestSenderRole {
27 #[serde(rename = "A18")]
29 GridOperator,
30 #[serde(rename = "A39")]
32 DataProvider,
33}
34
35#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
37pub enum StatusRequestReceiverRole {
38 #[serde(rename = "A18")]
40 GridOperator,
41 #[serde(rename = "A27")]
43 ResourceProvider,
44 #[serde(rename = "Z01")]
46 Other,
47}
48
49#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
51pub enum ParticipantStatus {
52 #[serde(rename = "A03")]
54 Deactivated,
55 #[serde(rename = "A04")]
57 Reactivated,
58 #[serde(rename = "A13")]
60 Withdrawn,
61}
62
63#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
67pub struct StatusRequestSenderMarketRole {
68 #[serde(rename = "type")]
70 pub role_type: StatusRequestSenderRole,
71}
72
73#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
75pub struct StatusRequestReceiverMarketRole {
76 #[serde(rename = "type")]
78 pub role_type: StatusRequestReceiverRole,
79}
80
81#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
85pub struct StatusRequestSender {
86 #[serde(rename = "mRID")]
88 pub m_rid: ParticipantMrid,
89 #[serde(rename = "marketRole")]
91 pub market_role: StatusRequestSenderMarketRole,
92}
93
94#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
96pub struct StatusRequestReceiver {
97 #[serde(rename = "mRID")]
99 pub m_rid: ParticipantMrid,
100 #[serde(rename = "marketRole")]
102 pub market_role: StatusRequestReceiverMarketRole,
103}
104
105#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
109pub struct AttributeInstanceComponent {
110 #[serde(rename = "attribute")]
112 pub attribute: String,
113 #[serde(
115 rename = "attributeValue",
116 default,
117 skip_serializing_if = "Option::is_none"
118 )]
119 pub attribute_value: Option<String>,
120}
121
122#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
126pub struct MktActivityRecord {
127 #[serde(rename = "MarketParticipant.mRID")]
129 pub market_participant_m_rid: SimpleContent<String>,
130 pub status: ParticipantStatus,
132}
133
134#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
142#[serde(rename = "StatusRequest_MarketDocument")]
143pub struct StatusRequestMarketDocument {
144 #[serde(rename = "mRID")]
146 pub m_rid: Mrid,
147 #[serde(rename = "type")]
149 pub doc_type: StatusRequestDocType,
150 #[serde(rename = "sender_MarketParticipant")]
152 pub sender_market_participant: StatusRequestSender,
153 #[serde(rename = "receiver_MarketParticipant")]
155 pub receiver_market_participant: StatusRequestReceiver,
156 #[serde(rename = "createdDateTime")]
158 pub created_date_time: UtcDateTime,
159 #[serde(
161 rename = "AttributeInstanceComponent",
162 default,
163 skip_serializing_if = "Vec::is_empty"
164 )]
165 pub attributes: Vec<AttributeInstanceComponent>,
166 #[serde(
168 rename = "MktActivityRecord",
169 default,
170 skip_serializing_if = "Vec::is_empty"
171 )]
172 pub mkt_activity_records: Vec<MktActivityRecord>,
173}