use serde::{Deserialize, Serialize};
use validator::Validate;
use crate::v2_1::{
datatypes::{CustomDataType, MessageContentType, StatusInfoType},
enumerations::{DayOfWeekEnumType, EvseKindEnumType, TariffChangeStatusEnumType},
};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Validate)]
#[serde(rename_all = "camelCase")]
pub struct TariffConditionsFixedType {
#[serde(skip_serializing_if = "Option::is_none")]
pub start_time_of_day: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_time_of_day: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[validate(length(min = 1, max = 7))]
pub day_of_week: Option<Vec<DayOfWeekEnumType>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub valid_from_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub valid_to_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub evse_kind: Option<EvseKindEnumType>,
#[serde(skip_serializing_if = "Option::is_none")]
#[validate(length(max = 20))]
pub payment_brand: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[validate(length(max = 20))]
pub payment_recognition: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_data: Option<CustomDataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Validate)]
#[serde(rename_all = "camelCase")]
pub struct TariffConditionsType {
#[serde(skip_serializing_if = "Option::is_none")]
pub start_time_of_day: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_time_of_day: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[validate(length(min = 1, max = 7))]
pub day_of_week: Option<Vec<DayOfWeekEnumType>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub valid_from_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub valid_to_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub evse_kind: Option<EvseKindEnumType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min_energy: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_energy: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min_current: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_current: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min_power: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_power: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min_time: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_time: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min_charging_time: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_charging_time: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min_idle_time: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_idle_time: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_data: Option<CustomDataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Validate)]
#[serde(rename_all = "camelCase")]
pub struct TariffEnergyPriceType {
pub price_kwh: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub conditions: Option<TariffConditionsType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_data: Option<CustomDataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Validate)]
#[serde(rename_all = "camelCase")]
pub struct ChangeTransactionTariffRequest {
pub transaction_id: String,
pub tariff_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub message_content: Option<MessageContentType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_data: Option<CustomDataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Validate)]
#[serde(rename_all = "camelCase")]
pub struct ChangeTransactionTariffResponse {
pub status: TariffChangeStatusEnumType,
#[serde(skip_serializing_if = "Option::is_none")]
pub status_info: Option<StatusInfoType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_data: Option<CustomDataType>,
}