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;
13use crate::v2_0_1::helpers::datetime_rfc3339;
14
15/// Sent by the Charging Station to the CSMS to request that the Certificate Authority signs the public key into a certificate.
16#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Default)]
17#[serde(rename_all = "camelCase")]
18pub struct TransactionEventRequest {
19    pub event_type: TransactionEventEnumType,
20    #[serde(with = "datetime_rfc3339")]
21    pub timestamp: DateTime<Utc>,
22    pub trigger_reason: TriggerReasonEnumType,
23    pub seq_no: i32,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub offline: Option<bool>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub number_of_phases_used: Option<i32>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub cable_max_current: Option<i32>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub reservation_id: Option<i32>,
32    pub transaction_info: TransactionType,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub id_token: Option<IdTokenType>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub evse: Option<EVSEType>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub meter_value: Option<Vec<MeterValueType>>,
39}
40
41/// This contains the field definition of the TransactionEventResponse PDU sent by the CSMS to the Charging Station in response to a TransactionEventRequest.
42#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Default)]
43#[serde(rename_all = "camelCase")]
44pub struct TransactionEventResponse {
45    #[serde(
46        with = "rust_decimal::serde::arbitrary_precision_option",
47        skip_serializing_if = "Option::is_none",
48        default
49    )]
50    pub total_cost: Option<Decimal>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub charging_priority: Option<i32>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub id_token_info: Option<IdTokenInfoType>,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub updated_personal_message: Option<MessageContentType>,
57}