use async_trait::async_trait;
use crate::core::base_structs::ClientBase;
use crate::core::ClientBuilder;
use crate::core::session_wrappers::LockedSession;
use crate::core::traits::{Client, Sender};
use crate::errors::VoiceflousionResult;
use crate::integrations::discord::discord_sender::DiscordSender;
use crate::integrations::discord::discord_update::DiscordUpdate;
pub struct DiscordClient{
client_base: ClientBase<DiscordSender>,
public_key: String
}
impl DiscordClient{
pub fn new(builder: ClientBuilder, public_key: String) -> Self {
let api_key = builder.api_key().clone();
let max_connections_per_moment = builder.max_connections_per_moment();
let connection_duration = builder.connection_duration();
let sender = DiscordSender::new(max_connections_per_moment, api_key, connection_duration);
Self {
client_base: ClientBase::new(builder, sender),
public_key
}
}
pub fn get_public_key(&self) -> &String{
&self.public_key
}
}
#[async_trait]
impl Client for DiscordClient{
type ClientUpdate<'async_trait> = DiscordUpdate;
type ClientSender<'async_trait> = DiscordSender;
fn client_base(&self) -> &ClientBase<Self::ClientSender<'_>> {
&self.client_base
}
async fn handle_carousel_switch(&self, locked_session: &LockedSession<'_>, interaction_time: i64, switch_direction: bool) -> VoiceflousionResult<Vec<<Self::ClientSender<'_> as Sender>::SenderResponder>> {
unimplemented!()
}
}