/// Decode behaviour for received RTP packets within the driver.
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[non_exhaustive]
pub enum DecodeMode {
    /// Packets received from Discord are handed over to events without any
    /// changes applied.
    ///
    /// No CPU work involved.
    ///
    /// *BEWARE: this will almost certainly break [user speaking events].
    /// Silent frame detection only works if extensions can be parsed or
    /// are not present, as they are encrypted.
    /// This event requires such functionality.*
    ///
    /// [user speaking events]: crate::events::CoreEvent::SpeakingUpdate
    Pass,
    /// Decrypts the body of each received packet.
    ///
    /// Small per-packet CPU use.
    Decrypt,
    /// Decrypts and decodes each received packet, correctly accounting for losses.
    ///
    /// Larger per-packet CPU use.
    Decode,
}

impl DecodeMode {
    /// Returns whether this mode will decrypt received packets.
    #[must_use]
    pub fn should_decrypt(self) -> bool {
        self != DecodeMode::Pass
    }
}
