use nimbi_protocol::messages::check_update::{CheckUpdateRequest, CheckUpdateResponse};
use nimbi_protocol::messages::Message;
use nimbi_protocol::microdot::{Deserialize as _, Serialize};
use nimbi_protocol::types::response::Response;
#[cfg(feature = "defmt")]
use defmt::*;
use crate::client::{Client, ClientConnection, ClientError};
impl<T, E> Client<T, E>
where
T: ClientConnection<E>,
{
pub async fn check_update<'a>(
&mut self,
read_buf: &'a mut [u8],
req: CheckUpdateRequest<'a>,
) -> Result<CheckUpdateResponse, ClientError<E>> {
let mut write_buf = [0u8; 64];
let bytes_written = Message::CheckUpdateRequest(req)
.serialize(&mut write_buf)
.map_err(ClientError::microdot)?;
self.connection.send(&write_buf[..bytes_written]).await?;
self.connection.recv(read_buf).await?;
let Response {
success,
payload,
error,
} = Response::<Message>::deserialize(&read_buf[..]).map_err(ClientError::microdot)?;
match (success, payload, error) {
(true, Some(Message::CheckUpdateResponse(payload)), None) => Ok(payload),
(false, None, Some(err)) => Err(ClientError::response(err)),
_ => Err(ClientError::Other("bad response")),
}
}
}