use bevy_net_backend::{BearerToken, Credentials, OutgoingRequest, WsPushMessage, WsRequest};
use crate::auth::AccessToken;
use crate::chat::{ChatHistory, ChatMessage, JoinRoom, LeaveRoom, ListMembers, MessageDeleted, Presence, SendMessage};
use crate::envelope::{ServerPush, WsCall};
macro_rules! ws_requests {
($($request:ty),* $(,)?) => {
$(
impl WsRequest for $request {
type Response = <$request as WsCall>::Response;
const KIND: &'static str = <$request as WsCall>::KIND;
}
)*
};
}
macro_rules! ws_pushes {
($($push:ty),* $(,)?) => {
$(
impl WsPushMessage for $push {
const KIND: &'static str = <$push as ServerPush>::KIND;
}
)*
};
}
ws_requests!(JoinRoom, LeaveRoom, SendMessage, ChatHistory, ListMembers);
ws_pushes!(ChatMessage, MessageDeleted, Presence);
impl Credentials for AccessToken {
fn apply(&self, request: &mut OutgoingRequest) {
BearerToken::new(self.expose()).apply(request);
}
}