rust-ocpp 3.0.4

ocpp 1.6, 2.0.1 and 2.1 libraries
Documentation
use super::{
    CustomData, IdToken, IdTokenInfo, MessageContent, MeterValue, Transaction,
    TransactionEventEnum, TransactionLimit, TriggerReasonEnum, EVSE,
};

#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq)]
pub struct TransactionEventRequest {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub custom_data: Option<CustomData>,
    pub event_type: TransactionEventEnum,
    pub meter_value: Vec<MeterValue>,
    pub timestamp: chrono::DateTime<chrono::Utc>,
    pub trigger_reason: TriggerReasonEnum,
    pub seq_no: i32,
    pub transaction_info: Transaction,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub offline: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub number_of_phases_used: Option<i32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub cable_max_current: Option<i32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub reservation_id: Option<i32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub evse: Option<EVSE>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub id_token: Option<IdToken>,
}

#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq)]
pub struct TransactionEventResponse {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub custom_data: Option<CustomData>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub total_cost: Option<f64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub charging_priority: Option<i32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub id_token_info: Option<IdTokenInfo>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub transaction_limit: Option<TransactionLimit>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub updated_personal_message: Option<MessageContent>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub updated_personal_message_extra: Option<Vec<MessageContent>>,
}

impl TransactionEventRequest {
    pub fn new(
        event_type: TransactionEventEnum,
        meter_value: Vec<MeterValue>,
        timestamp: chrono::DateTime<chrono::Utc>,
        trigger_reason: TriggerReasonEnum,
        seq_no: i32,
        transaction_info: Transaction,
    ) -> Self {
        Self {
            custom_data: None,
            event_type,
            meter_value,
            timestamp,
            trigger_reason,
            seq_no,
            transaction_info,
            offline: None,
            number_of_phases_used: None,
            cable_max_current: None,
            reservation_id: None,
            evse: None,
            id_token: None,
        }
    }
}

impl TransactionEventResponse {
    pub fn new() -> Self {
        Self {
            custom_data: None,
            total_cost: None,
            charging_priority: None,
            id_token_info: None,
            transaction_limit: None,
            updated_personal_message: None,
            updated_personal_message_extra: None,
        }
    }
}