use crate::action::Action;
use crate::error::ClientError;
use crate::ocpp_1_6::OCPP1_6Client;
use crate::ocpp_1_6::error::OCPP1_6Error;
use core::future::Future;
use ocpp_types::v16::{
AuthorizeRequest, AuthorizeResponse, BootNotificationRequest, BootNotificationResponse,
CancelReservationRequest, CancelReservationResponse, CertificateSignedRequest,
CertificateSignedResponse, ChangeAvailabilityRequest, ChangeAvailabilityResponse,
ChangeConfigurationRequest, ChangeConfigurationResponse, ClearCacheRequest, ClearCacheResponse,
ClearChargingProfileRequest, ClearChargingProfileResponse, DataTransferRequest,
DataTransferResponse, DeleteCertificateRequest, DeleteCertificateResponse,
DiagnosticsStatusNotificationRequest, DiagnosticsStatusNotificationResponse,
ExtendedTriggerMessageRequest, ExtendedTriggerMessageResponse,
FirmwareStatusNotificationRequest, FirmwareStatusNotificationResponse,
GetCompositeScheduleRequest, GetCompositeScheduleResponse, GetConfigurationRequest,
GetConfigurationResponse, GetDiagnosticsRequest, GetDiagnosticsResponse,
GetInstalledCertificateIdsRequest, GetInstalledCertificateIdsResponse,
GetLocalListVersionRequest, GetLocalListVersionResponse, GetLogRequest, GetLogResponse,
HeartbeatRequest, HeartbeatResponse, InstallCertificateRequest, InstallCertificateResponse,
LogStatusNotificationRequest, LogStatusNotificationResponse, MeterValuesRequest,
MeterValuesResponse, RemoteStartTransactionRequest, RemoteStartTransactionResponse,
RemoteStopTransactionRequest, RemoteStopTransactionResponse, ReserveNowRequest,
ReserveNowResponse, ResetRequest, ResetResponse, SecurityEventNotificationRequest,
SecurityEventNotificationResponse, SendLocalListRequest, SendLocalListResponse,
SetChargingProfileRequest, SetChargingProfileResponse, SignCertificateRequest,
SignCertificateResponse, SignedFirmwareStatusNotificationRequest,
SignedFirmwareStatusNotificationResponse, SignedUpdateFirmwareRequest,
SignedUpdateFirmwareResponse, StartTransactionRequest, StartTransactionResponse,
StatusNotificationRequest, StatusNotificationResponse, StopTransactionRequest,
StopTransactionResponse, TriggerMessageRequest, TriggerMessageResponse, UnlockConnectorRequest,
UnlockConnectorResponse, UpdateFirmwareRequest, UpdateFirmwareResponse,
};
macro_rules! ocpp_1_6_action {
($name:ident, $req:ty, $res:ty, $action:literal, $send:ident, $on:ident, $wait_for:ident) => {
#[doc = concat!("Marker type for the `", $action, "` action.")]
pub struct $name;
impl Action for $name {
const NAME: &'static str = $action;
type Request = $req;
type Response = $res;
}
impl OCPP1_6Client {
pub async fn $send(&self, request: $req) -> Result<$res, ClientError<OCPP1_6Error>> {
self.call::<$name>(request).await
}
pub async fn $on<F, FF>(&self, callback: F)
where
F: FnMut($req, Self) -> FF + Send + Sync + 'static,
FF: Future<Output = Result<$res, OCPP1_6Error>> + Send,
{
self.on::<$name, F, FF>(callback).await
}
#[cfg(feature = "test")]
pub async fn $wait_for<F, FF>(
&self,
callback: F,
) -> Result<$req, ClientError<OCPP1_6Error>>
where
F: FnMut($req, Self) -> FF + Send + Sync + 'static,
FF: Future<Output = Result<$res, OCPP1_6Error>> + Send,
{
self.wait_for::<$name, F, FF>(callback).await
}
}
};
}
ocpp_1_6_action!(
Authorize,
AuthorizeRequest,
AuthorizeResponse,
"Authorize",
send_authorize,
on_authorize,
wait_for_authorize
);
ocpp_1_6_action!(
BootNotification,
BootNotificationRequest,
BootNotificationResponse,
"BootNotification",
send_boot_notification,
on_boot_notification,
wait_for_boot_notification
);
ocpp_1_6_action!(
CancelReservation,
CancelReservationRequest,
CancelReservationResponse,
"CancelReservation",
send_cancel_reservation,
on_cancel_reservation,
wait_for_cancel_reservation
);
ocpp_1_6_action!(
CertificateSigned,
CertificateSignedRequest,
CertificateSignedResponse,
"CertificateSigned",
send_certificate_signed,
on_certificate_signed,
wait_for_certificate_signed
);
ocpp_1_6_action!(
ChangeAvailability,
ChangeAvailabilityRequest,
ChangeAvailabilityResponse,
"ChangeAvailability",
send_change_availability,
on_change_availability,
wait_for_change_availability
);
ocpp_1_6_action!(
ChangeConfiguration,
ChangeConfigurationRequest,
ChangeConfigurationResponse,
"ChangeConfiguration",
send_change_configuration,
on_change_configuration,
wait_for_change_configuration
);
ocpp_1_6_action!(
ClearCache,
ClearCacheRequest,
ClearCacheResponse,
"ClearCache",
send_clear_cache,
on_clear_cache,
wait_for_clear_cache
);
ocpp_1_6_action!(
ClearChargingProfile,
ClearChargingProfileRequest,
ClearChargingProfileResponse,
"ClearChargingProfile",
send_clear_charging_profile,
on_clear_charging_profile,
wait_for_clear_charging_profile
);
ocpp_1_6_action!(
DataTransfer,
DataTransferRequest,
DataTransferResponse,
"DataTransfer",
send_data_transfer,
on_data_transfer,
wait_for_data_transfer
);
ocpp_1_6_action!(
DeleteCertificate,
DeleteCertificateRequest,
DeleteCertificateResponse,
"DeleteCertificate",
send_delete_certificate,
on_delete_certificate,
wait_for_delete_certificate
);
ocpp_1_6_action!(
DiagnosticsStatusNotification,
DiagnosticsStatusNotificationRequest,
DiagnosticsStatusNotificationResponse,
"DiagnosticsStatusNotification",
send_diagnostics_status_notification,
on_diagnostics_status_notification,
wait_for_diagnostics_status_notification
);
ocpp_1_6_action!(
ExtendedTriggerMessage,
ExtendedTriggerMessageRequest,
ExtendedTriggerMessageResponse,
"ExtendedTriggerMessage",
send_extended_trigger_message,
on_extended_trigger_message,
wait_for_extended_trigger_message
);
ocpp_1_6_action!(
FirmwareStatusNotification,
FirmwareStatusNotificationRequest,
FirmwareStatusNotificationResponse,
"FirmwareStatusNotification",
send_firmware_status_notification,
on_firmware_status_notification,
wait_for_firmware_status_notification
);
ocpp_1_6_action!(
GetCompositeSchedule,
GetCompositeScheduleRequest,
GetCompositeScheduleResponse,
"GetCompositeSchedule",
send_get_composite_schedule,
on_get_composite_schedule,
wait_for_get_composite_schedule
);
ocpp_1_6_action!(
GetConfiguration,
GetConfigurationRequest,
GetConfigurationResponse,
"GetConfiguration",
send_get_configuration,
on_get_configuration,
wait_for_get_configuration
);
ocpp_1_6_action!(
GetDiagnostics,
GetDiagnosticsRequest,
GetDiagnosticsResponse,
"GetDiagnostics",
send_get_diagnostics,
on_get_diagnostics,
wait_for_get_diagnostics
);
ocpp_1_6_action!(
GetInstalledCertificateIds,
GetInstalledCertificateIdsRequest,
GetInstalledCertificateIdsResponse,
"GetInstalledCertificateIds",
send_get_installed_certificate_ids,
on_get_installed_certificate_ids,
wait_for_get_installed_certificate_ids
);
ocpp_1_6_action!(
GetLocalListVersion,
GetLocalListVersionRequest,
GetLocalListVersionResponse,
"GetLocalListVersion",
send_get_local_list_version,
on_get_local_list_version,
wait_for_get_local_list_version
);
ocpp_1_6_action!(
GetLog,
GetLogRequest,
GetLogResponse,
"GetLog",
send_get_log,
on_get_log,
wait_for_get_log
);
ocpp_1_6_action!(
Heartbeat,
HeartbeatRequest,
HeartbeatResponse,
"Heartbeat",
send_heartbeat,
on_heartbeat,
wait_for_heartbeat
);
ocpp_1_6_action!(
InstallCertificate,
InstallCertificateRequest,
InstallCertificateResponse,
"InstallCertificate",
send_install_certificate,
on_install_certificate,
wait_for_install_certificate
);
ocpp_1_6_action!(
LogStatusNotification,
LogStatusNotificationRequest,
LogStatusNotificationResponse,
"LogStatusNotification",
send_log_status_notification,
on_log_status_notification,
wait_for_log_status_notification
);
ocpp_1_6_action!(
MeterValues,
MeterValuesRequest,
MeterValuesResponse,
"MeterValues",
send_meter_values,
on_meter_values,
wait_for_meter_values
);
ocpp_1_6_action!(
RemoteStartTransaction,
RemoteStartTransactionRequest,
RemoteStartTransactionResponse,
"RemoteStartTransaction",
send_remote_start_transaction,
on_remote_start_transaction,
wait_for_remote_start_transaction
);
ocpp_1_6_action!(
RemoteStopTransaction,
RemoteStopTransactionRequest,
RemoteStopTransactionResponse,
"RemoteStopTransaction",
send_remote_stop_transaction,
on_remote_stop_transaction,
wait_for_remote_stop_transaction
);
ocpp_1_6_action!(
ReserveNow,
ReserveNowRequest,
ReserveNowResponse,
"ReserveNow",
send_reserve_now,
on_reserve_now,
wait_for_reserve_now
);
ocpp_1_6_action!(
Reset,
ResetRequest,
ResetResponse,
"Reset",
send_reset,
on_reset,
wait_for_reset
);
ocpp_1_6_action!(
SecurityEventNotification,
SecurityEventNotificationRequest,
SecurityEventNotificationResponse,
"SecurityEventNotification",
send_security_event_notification,
on_security_event_notification,
wait_for_security_event_notification
);
ocpp_1_6_action!(
SendLocalList,
SendLocalListRequest,
SendLocalListResponse,
"SendLocalList",
send_send_local_list,
on_send_local_list,
wait_for_send_local_list
);
ocpp_1_6_action!(
SetChargingProfile,
SetChargingProfileRequest,
SetChargingProfileResponse,
"SetChargingProfile",
send_set_charging_profile,
on_set_charging_profile,
wait_for_set_charging_profile
);
ocpp_1_6_action!(
SignCertificate,
SignCertificateRequest,
SignCertificateResponse,
"SignCertificate",
send_sign_certificate,
on_sign_certificate,
wait_for_sign_certificate
);
ocpp_1_6_action!(
SignedFirmwareStatusNotification,
SignedFirmwareStatusNotificationRequest,
SignedFirmwareStatusNotificationResponse,
"SignedFirmwareStatusNotification",
send_signed_firmware_status_notification,
on_signed_firmware_status_notification,
wait_for_signed_firmware_status_notification
);
ocpp_1_6_action!(
SignedUpdateFirmware,
SignedUpdateFirmwareRequest,
SignedUpdateFirmwareResponse,
"SignedUpdateFirmware",
send_signed_update_firmware,
on_signed_update_firmware,
wait_for_signed_update_firmware
);
ocpp_1_6_action!(
StartTransaction,
StartTransactionRequest,
StartTransactionResponse,
"StartTransaction",
send_start_transaction,
on_start_transaction,
wait_for_start_transaction
);
ocpp_1_6_action!(
StatusNotification,
StatusNotificationRequest,
StatusNotificationResponse,
"StatusNotification",
send_status_notification,
on_status_notification,
wait_for_status_notification
);
ocpp_1_6_action!(
StopTransaction,
StopTransactionRequest,
StopTransactionResponse,
"StopTransaction",
send_stop_transaction,
on_stop_transaction,
wait_for_stop_transaction
);
ocpp_1_6_action!(
TriggerMessage,
TriggerMessageRequest,
TriggerMessageResponse,
"TriggerMessage",
send_trigger_message,
on_trigger_message,
wait_for_trigger_message
);
ocpp_1_6_action!(
UnlockConnector,
UnlockConnectorRequest,
UnlockConnectorResponse,
"UnlockConnector",
send_unlock_connector,
on_unlock_connector,
wait_for_unlock_connector
);
ocpp_1_6_action!(
UpdateFirmware,
UpdateFirmwareRequest,
UpdateFirmwareResponse,
"UpdateFirmware",
send_update_firmware,
on_update_firmware,
wait_for_update_firmware
);