rust_ocpp/v2_0_1/messages/
transaction_event.rs1use 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#[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#[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}