use async_trait::async_trait;
use futures::channel::mpsc::UnboundedSender as Sender;
use crate::gateway::ShardRunnerMessage;
use crate::model::id::{GuildId, UserId};
use crate::model::voice::VoiceState;
#[async_trait]
pub trait VoiceGatewayManager: Send + Sync {
async fn initialise(&self, shard_count: u32, user_id: UserId);
async fn register_shard(&self, shard_id: u32, sender: Sender<ShardRunnerMessage>);
async fn deregister_shard(&self, shard_id: u32);
async fn server_update(&self, guild_id: GuildId, endpoint: &Option<String>, token: &str);
async fn state_update(&self, guild_id: GuildId, voice_state: &VoiceState);
}