use crate::*;
impl Default for Response {
#[inline(always)]
fn default() -> Self {
Self { data: Vec::new() }
}
}
impl Response {
#[inline(always)]
pub fn from<T>(data: T) -> Self
where
T: Into<ResponseData>,
{
Self { data: data.into() }
}
pub fn get_data(&self) -> &ResponseData {
&self.data
}
pub async fn send(
&self,
socket_opt: &Option<ArcRwLockUdpSocket>,
addr_opt: &Option<SocketAddr>,
) -> ResponseResult {
if let Some(socket_lock) = socket_opt {
let socket: tokio::sync::RwLockReadGuard<'_, UdpSocket> =
socket_lock.get_read_lock().await;
if let Some(addr) = addr_opt {
socket
.send_to(self.get_data(), addr)
.await
.map_err(|e| ResponseError::SendError(e.to_string()))?;
return Ok(());
}
return Err(ResponseError::AddressNotAvailable);
}
Err(ResponseError::SocketNotAvailable)
}
}