Gateway: Fix serenity breaking changes (#173)
Fix issues caused by serenity-rs/serenity#2372 and serenity-rs/serenity#2380. Additionally, this Boxes the TrySendError from Serenity at Clippy's behest (causing a ~330B Result type). --------- Co-authored-by: Kyle Simpson <kyleandrew.simpson@gmail.com>
This commit is contained in:
@@ -5,7 +5,7 @@ use futures::channel::mpsc::TrySendError;
|
|||||||
#[cfg(not(feature = "simd-json"))]
|
#[cfg(not(feature = "simd-json"))]
|
||||||
pub use serde_json::Error as JsonError;
|
pub use serde_json::Error as JsonError;
|
||||||
#[cfg(feature = "serenity")]
|
#[cfg(feature = "serenity")]
|
||||||
use serenity::gateway::InterMessage;
|
use serenity::gateway::ShardRunnerMessage;
|
||||||
#[cfg(feature = "simd-json")]
|
#[cfg(feature = "simd-json")]
|
||||||
pub use simd_json::Error as JsonError;
|
pub use simd_json::Error as JsonError;
|
||||||
#[cfg(feature = "gateway")]
|
#[cfg(feature = "gateway")]
|
||||||
@@ -48,7 +48,7 @@ pub enum JoinError {
|
|||||||
Driver(ConnectionError),
|
Driver(ConnectionError),
|
||||||
#[cfg(feature = "serenity")]
|
#[cfg(feature = "serenity")]
|
||||||
/// Serenity-specific WebSocket send error.
|
/// Serenity-specific WebSocket send error.
|
||||||
Serenity(TrySendError<InterMessage>),
|
Serenity(Box<TrySendError<ShardRunnerMessage>>),
|
||||||
#[cfg(feature = "twilight")]
|
#[cfg(feature = "twilight")]
|
||||||
/// Twilight-specific WebSocket send error when a message fails to send over websocket.
|
/// Twilight-specific WebSocket send error when a message fails to send over websocket.
|
||||||
Twilight(SendError),
|
Twilight(SendError),
|
||||||
@@ -117,8 +117,8 @@ impl Error for JoinError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(all(feature = "serenity", feature = "gateway"))]
|
#[cfg(all(feature = "serenity", feature = "gateway"))]
|
||||||
impl From<TrySendError<InterMessage>> for JoinError {
|
impl From<Box<TrySendError<ShardRunnerMessage>>> for JoinError {
|
||||||
fn from(e: TrySendError<InterMessage>) -> Self {
|
fn from(e: Box<TrySendError<ShardRunnerMessage>>) -> Self {
|
||||||
JoinError::Serenity(e)
|
JoinError::Serenity(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,8 +17,7 @@ use once_cell::sync::OnceCell;
|
|||||||
use parking_lot::RwLock as PRwLock;
|
use parking_lot::RwLock as PRwLock;
|
||||||
#[cfg(feature = "serenity")]
|
#[cfg(feature = "serenity")]
|
||||||
use serenity::{
|
use serenity::{
|
||||||
client::bridge::voice::VoiceGatewayManager,
|
gateway::{ShardRunnerMessage, VoiceGatewayManager},
|
||||||
gateway::InterMessage,
|
|
||||||
model::{
|
model::{
|
||||||
id::{GuildId as SerenityGuild, UserId as SerenityUser},
|
id::{GuildId as SerenityGuild, UserId as SerenityUser},
|
||||||
voice::VoiceState,
|
voice::VoiceState,
|
||||||
@@ -416,7 +415,7 @@ impl VoiceGatewayManager for Songbird {
|
|||||||
debug!("Songbird ({:?}) Initialised!", user_id);
|
debug!("Songbird ({:?}) Initialised!", user_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn register_shard(&self, shard_id: u32, sender: Sender<InterMessage>) {
|
async fn register_shard(&self, shard_id: u32, sender: Sender<ShardRunnerMessage>) {
|
||||||
debug!(
|
debug!(
|
||||||
"Registering Serenity shard handle {} with Songbird",
|
"Registering Serenity shard handle {} with Songbird",
|
||||||
shard_id
|
shard_id
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ use parking_lot::{lock_api::RwLockWriteGuard, Mutex as PMutex, RwLock as PRwLock
|
|||||||
#[cfg(feature = "serenity")]
|
#[cfg(feature = "serenity")]
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
#[cfg(feature = "serenity")]
|
#[cfg(feature = "serenity")]
|
||||||
use serenity::gateway::InterMessage;
|
use serenity::gateway::ShardRunnerMessage;
|
||||||
#[cfg(feature = "serenity")]
|
#[cfg(feature = "serenity")]
|
||||||
use std::result::Result as StdResult;
|
use std::result::Result as StdResult;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
@@ -96,7 +96,7 @@ impl Sharder {
|
|||||||
#[cfg(feature = "serenity")]
|
#[cfg(feature = "serenity")]
|
||||||
impl Sharder {
|
impl Sharder {
|
||||||
#[allow(unreachable_patterns)]
|
#[allow(unreachable_patterns)]
|
||||||
pub(crate) fn register_shard_handle(&self, shard_id: u32, sender: Sender<InterMessage>) {
|
pub(crate) fn register_shard_handle(&self, shard_id: u32, sender: Sender<ShardRunnerMessage>) {
|
||||||
if let Sharder::Serenity(s) = self {
|
if let Sharder::Serenity(s) = self {
|
||||||
s.register_shard_handle(shard_id, sender);
|
s.register_shard_handle(shard_id, sender);
|
||||||
} else {
|
} else {
|
||||||
@@ -128,7 +128,7 @@ impl SerenitySharder {
|
|||||||
self.0.entry(shard_id).or_default().clone()
|
self.0.entry(shard_id).or_default().clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register_shard_handle(&self, shard_id: u32, sender: Sender<InterMessage>) {
|
fn register_shard_handle(&self, shard_id: u32, sender: Sender<ShardRunnerMessage>) {
|
||||||
// Write locks are only used to add new entries to the map.
|
// Write locks are only used to add new entries to the map.
|
||||||
let handle = self.get_or_insert_shard_handle(shard_id);
|
let handle = self.get_or_insert_shard_handle(shard_id);
|
||||||
|
|
||||||
@@ -180,7 +180,7 @@ impl VoiceUpdate for Shard {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
handle.send(InterMessage::json(map.to_string()))?;
|
handle.send(ShardRunnerMessage::Message(map.to_string().into()))?;
|
||||||
Ok(())
|
Ok(())
|
||||||
},
|
},
|
||||||
#[cfg(feature = "twilight")]
|
#[cfg(feature = "twilight")]
|
||||||
@@ -228,13 +228,13 @@ pub trait VoiceUpdate {
|
|||||||
/// a reconnect/rebalance is ongoing.
|
/// a reconnect/rebalance is ongoing.
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct SerenityShardHandle {
|
pub struct SerenityShardHandle {
|
||||||
sender: PRwLock<Option<Sender<InterMessage>>>,
|
sender: PRwLock<Option<Sender<ShardRunnerMessage>>>,
|
||||||
queue: PMutex<Vec<InterMessage>>,
|
queue: PMutex<Vec<ShardRunnerMessage>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "serenity")]
|
#[cfg(feature = "serenity")]
|
||||||
impl SerenityShardHandle {
|
impl SerenityShardHandle {
|
||||||
fn register(&self, sender: Sender<InterMessage>) {
|
fn register(&self, sender: Sender<ShardRunnerMessage>) {
|
||||||
debug!("Adding shard handle send channel...");
|
debug!("Adding shard handle send channel...");
|
||||||
|
|
||||||
let mut sender_lock = self.sender.write();
|
let mut sender_lock = self.sender.write();
|
||||||
@@ -275,10 +275,13 @@ impl SerenityShardHandle {
|
|||||||
debug!("Removed shard handle send channel.");
|
debug!("Removed shard handle send channel.");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send(&self, message: InterMessage) -> StdResult<(), TrySendError<InterMessage>> {
|
fn send(
|
||||||
|
&self,
|
||||||
|
message: ShardRunnerMessage,
|
||||||
|
) -> StdResult<(), Box<TrySendError<ShardRunnerMessage>>> {
|
||||||
let sender_lock = self.sender.read();
|
let sender_lock = self.sender.read();
|
||||||
if let Some(sender) = &*sender_lock {
|
if let Some(sender) = &*sender_lock {
|
||||||
sender.unbounded_send(message)
|
sender.unbounded_send(message).map_err(Box::new)
|
||||||
} else {
|
} else {
|
||||||
debug!("Serenity shard temporarily disconnected: buffering message...");
|
debug!("Serenity shard temporarily disconnected: buffering message...");
|
||||||
let mut messages_lock = self.queue.lock();
|
let mut messages_lock = self.queue.lock();
|
||||||
|
|||||||
Reference in New Issue
Block a user