use super::super::payloads::{StatusPayload, to_value};
use super::super::{ResponseStatus, Result, Simulator, UiLogLevel, WsWrite};
impl Simulator {
pub(in crate::simulator) async fn send_status_response(
&mut self,
write: &mut WsWrite,
message_id: &str,
status: ResponseStatus,
) -> Result<()> {
self
.send_call_result(
write,
message_id,
to_value(&StatusPayload {
status: status.as_str(),
}),
)
.await
}
pub(in crate::simulator) fn requested_or_first_startable_connector(
&self,
requested_connector: Option<u16>,
) -> Option<u16> {
match requested_connector {
Some(connector) => Some(connector),
None => self.first_startable_connector(),
}
}
pub(in crate::simulator) async fn resolve_start_connector_or_reject(
&mut self,
write: &mut WsWrite,
message_id: &str,
requested_connector: Option<u16>,
) -> Result<Option<u16>> {
if let Some(connector) =
self.requested_or_first_startable_connector(requested_connector)
{
Ok(Some(connector))
} else {
self
.send_status_response(write, message_id, ResponseStatus::Rejected)
.await?;
Ok(None)
}
}
pub(in crate::simulator) async fn handle_reset_only_call(
&mut self,
write: &mut WsWrite,
message_id: &str,
) -> Result<()> {
self.log(
UiLogLevel::Info,
"Received Reset request. Simulator will acknowledge only.",
);
self
.send_status_response(write, message_id, ResponseStatus::Accepted)
.await
}
}