use renet2_netcode::{ConnectToken, NetcodeError, ServerCertHash};
use serde::{Deserialize, Serialize};
use serde_with::{serde_as, Bytes};
pub fn connect_token_to_bytes(connect_token: &ConnectToken) -> Result<Vec<u8>, std::io::Error> {
let mut bytes = Vec::<u8>::with_capacity(std::mem::size_of::<ConnectToken>());
connect_token.write(&mut bytes)?;
Ok(bytes)
}
pub fn connect_token_from_bytes(connect_token_bytes: &[u8]) -> Result<ConnectToken, NetcodeError> {
ConnectToken::read(&mut &connect_token_bytes[..])
}
#[serde_as]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ServerConnectToken {
Native {
#[serde_as(as = "Bytes")]
token: Vec<u8>,
},
WasmWt {
#[serde_as(as = "Bytes")]
token: Vec<u8>,
cert_hashes: Vec<ServerCertHash>,
},
WasmWs {
#[serde_as(as = "Bytes")]
token: Vec<u8>,
url: url::Url,
},
#[cfg(feature = "memory_transport")]
#[serde(skip)]
Memory {
token: Vec<u8>,
client: renet2_netcode::MemorySocketClient,
},
}
impl Default for ServerConnectToken {
fn default() -> Self {
Self::Native { token: vec![] }
}
}