rust_ocpp/v2_0_1/messages/
transaction_event.rs

1use chrono::DateTime;
2use chrono::Utc;
3use rust_decimal::Decimal;
4
5use crate::v2_0_1::datatypes::evse_type::EVSEType;
6use crate::v2_0_1::datatypes::id_token_info_type::IdTokenInfoType;
7use crate::v2_0_1::datatypes::id_token_type::IdTokenType;
8use crate::v2_0_1::datatypes::message_content_type::MessageContentType;
9use crate::v2_0_1::datatypes::meter_value_type::MeterValueType;
10use crate::v2_0_1::datatypes::transaction_type::TransactionType;
11use crate::v2_0_1::enumerations::transaction_event_enum_type::TransactionEventEnumType;
12use crate::v2_0_1::enumerations::trigger_reason_enum_type::TriggerReasonEnumType;
13
14/// Sent by the Charging Station to the CSMS to request that the Certificate Authority signs the public key into a certificate.
15#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Default)]
16#[serde(rename_all = "camelCase")]
17pub struct TransactionEventRequest {
18    pub event_type: TransactionEventEnumType,
19    pub timestamp: DateTime<Utc>,
20    pub trigger_reason: TriggerReasonEnumType,
21    pub seq_no: i32,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub offline: Option<bool>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub number_of_phases_used: Option<i32>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub cable_max_current: Option<i32>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub reservation_id: Option<i32>,
30    pub transaction_info: TransactionType,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub id_token: Option<IdTokenType>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub evse: Option<EVSEType>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub meter_value: Option<Vec<MeterValueType>>,
37}
38
39/// This contains the field definition of the TransactionEventResponse PDU sent by the CSMS to the Charging Station in response to a TransactionEventRequest.
40#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Default)]
41#[serde(rename_all = "camelCase")]
42pub struct TransactionEventResponse {
43    #[serde(skip_serializing_if = "Option::is_none")]
44    #[serde(with = "rust_decimal::serde::arbitrary_precision_option")]
45    pub total_cost: Option<Decimal>,
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub charging_priority: Option<i32>,
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub id_token_info: Option<IdTokenInfoType>,
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub updated_personal_message: Option<MessageContentType>,
52}