pub mod event;
mod shard_manager;
mod shard_manager_monitor;
mod shard_messenger;
mod shard_queuer;
mod shard_runner;
mod shard_runner_message;
use std::fmt;
use std::time::Duration as StdDuration;
pub use self::shard_manager::{ShardManager, ShardManagerOptions};
pub use self::shard_manager_monitor::{ShardManagerError, ShardManagerMonitor};
pub use self::shard_messenger::ShardMessenger;
pub use self::shard_queuer::ShardQueuer;
pub use self::shard_runner::{ShardRunner, ShardRunnerOptions};
pub use self::shard_runner_message::{ChunkGuildFilter, ShardRunnerMessage};
use crate::gateway::ConnectionStage;
#[allow(clippy::large_enum_variant)]
#[derive(Clone, Debug)]
pub enum ShardClientMessage {
Manager(ShardManagerMessage),
Runner(ShardRunnerMessage),
}
#[derive(Clone, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)]
pub enum ShardManagerMessage {
Restart(ShardId),
ShardUpdate { id: ShardId, latency: Option<StdDuration>, stage: ConnectionStage },
Shutdown(ShardId, u16),
ShutdownAll,
ShutdownInitiated,
ShutdownFinished(ShardId),
ShardInvalidAuthentication,
ShardInvalidGatewayIntents,
ShardDisallowedGatewayIntents,
}
#[derive(Clone, Debug)]
pub enum ShardQueuerMessage {
Start(ShardId, ShardId),
Shutdown,
ShutdownShard(ShardId, u16),
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)]
pub struct ShardId(pub u64);
impl fmt::Display for ShardId {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.0)
}
}
#[derive(Debug)]
pub struct ShardRunnerInfo {
pub latency: Option<StdDuration>,
pub runner_tx: ShardMessenger,
pub stage: ConnectionStage,
}
impl AsRef<ShardMessenger> for ShardRunnerInfo {
fn as_ref(&self) -> &ShardMessenger {
&self.runner_tx
}
}