use serde::{Deserialize, Serialize};
use uuid::Uuid;
pub type TransactionId = Uuid;
pub type InitialTransactionId = Uuid;
pub type ReferenceId = Uuid;
pub type MarketPartnerId = i64;
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct NeloId(pub String);
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct SrId(pub String);
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(untagged)]
pub enum LocationId {
NetworkLocation(NeloId),
ControllableResource(SrId),
}
impl std::fmt::Display for NeloId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(&self.0)
}
}
impl std::fmt::Display for SrId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(&self.0)
}
}
impl std::fmt::Display for LocationId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
LocationId::NetworkLocation(id) => id.fmt(f),
LocationId::ControllableResource(id) => id.fmt(f),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct MaximumPowerValue(pub String);
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CommandControl {
pub maximum_power_value: MaximumPowerValue,
pub execution_time_from: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub execution_time_until: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CommandRegular {
pub execution_time_from: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ReasonNegative {
#[serde(rename = "communicationFailure")]
CommunicationFailure,
#[serde(rename = "overload")]
Overload,
#[serde(rename = "unable")]
Unable,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum StateNegative {
#[serde(rename = "failed")]
Failed,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum StatePositive {
#[serde(rename = "succeeded")]
Succeeded,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum PreliminaryStatePositive {
#[serde(rename = "possible")]
Possible,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum StateUnknown {
#[serde(rename = "unknown")]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct MaloId(pub String);
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct MeloId(pub String);
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct TrId(pub String);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum EnergyDirection {
#[serde(rename = "consumption")]
Consumption,
#[serde(rename = "production")]
Production,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum MeasurementTechnologyClassification {
#[serde(rename = "intelligentMeasuringSystem")]
IntelligentMeasuringSystem,
#[serde(rename = "conventionalMeasuringSystem")]
ConventionalMeasuringSystem,
#[serde(rename = "noMeasurement")]
NoMeasurement,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum OptionalChangeForecastBasis {
#[serde(rename = "possible")]
Possible,
#[serde(rename = "notPossible")]
NotPossible,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum MarketLocationProperty {
#[serde(rename = "customerFacility")]
CustomerFacility,
#[serde(rename = "nonActice")]
NonActive,
#[serde(rename = "standard")]
Standard,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ProportionType {
#[serde(rename = "bilateralAgreement")]
BilateralAgreement,
#[serde(rename = "percent")]
Percent,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct IdentificationParameter {
pub identification_date_time: String,
pub energy_direction: EnergyDirection,
#[serde(skip_serializing_if = "Option::is_none")]
pub identification_parameter_id: Option<IdentificationParameterId>,
pub identification_parameter_address: IdentificationParameterAddress,
}
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct IdentificationParameterId {
#[serde(skip_serializing_if = "Option::is_none")]
pub malo_id: Option<MaloId>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tranchen_ids: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub melo_ids: Option<Vec<MeloId>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meter_numbers: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub customer_number: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct IdentificationParameterAddress {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<PersonName>,
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<PostalAddress>,
}
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PersonName {
#[serde(skip_serializing_if = "Option::is_none")]
pub surnames: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub firstnames: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub company: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PostalAddress {
#[serde(skip_serializing_if = "Option::is_none")]
pub country_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub zip_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub city: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub street: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub house_number: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub house_number_addition: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct MaloIdentResultPositive {
pub data_market_location: DataMarketLocation,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_tranches: Option<Vec<DataTranche>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_meter_locations: Option<Vec<DataMeterLocation>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_technical_resources: Option<Vec<DataTechnicalResource>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_controllable_resources: Option<Vec<DataControllableResource>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_network_locations: Option<Vec<DataNetworkLocation>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct MaloIdentResultNegative {
pub decision_tree: String,
pub response_code: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub network_operator: Option<MarketPartnerId>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DataMarketLocation {
pub malo_id: MaloId,
pub energy_direction: EnergyDirection,
pub measurement_technology_classification: MeasurementTechnologyClassification,
pub optional_change_forecast_basis: OptionalChangeForecastBasis,
pub data_market_location_properties: Vec<MarketLocationProperties>,
pub data_market_location_network_operators: Vec<TimeSlicedMarketPartner>,
pub data_market_location_transmission_system_operators: Vec<TimeSlicedMarketPartner>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_market_location_measuring_point_operators: Option<Vec<TimeSlicedMarketPartner>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_market_location_suppliers: Option<Vec<TimeSlicedMarketPartner>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_market_location_name: Option<PersonName>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_market_location_address: Option<PostalAddress>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TimeSlicedMarketPartner {
pub market_partner_id: MarketPartnerId,
pub execution_time_from: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub execution_time_until: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct MarketLocationProperties {
pub market_location_property: MarketLocationProperty,
pub execution_time_from: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub execution_time_until: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DataMeterLocation {
pub melo_id: MeloId,
pub meter_number: String,
pub data_meter_location_measuring_point_operators: Vec<TimeSlicedMarketPartner>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DataTechnicalResource {
pub tr_id: TrId,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DataControllableResource {
pub sr_id: SrId,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_controllable_resource_measuring_point_operators: Option<Vec<SrMarketPartner>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SrMarketPartner {
pub market_partner_id: MarketPartnerId,
pub execution_time_from: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub execution_time_until: Option<String>,
pub market_partner_type_sr: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DataNetworkLocation {
pub nelo_id: NeloId,
pub data_network_location_measuring_point_operators: Vec<TimeSlicedMarketPartner>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DataTranche {
pub tranchen_id: String,
pub proportion: ProportionType,
#[serde(skip_serializing_if = "Option::is_none")]
pub percent: Option<f64>,
pub data_tranche_suppliers: Vec<TimeSlicedMarketPartner>,
}