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;
13use crate::v2_0_1::helpers::datetime_rfc3339;
14
15#[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#[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}