Skip to main content

stoat/
error.rs

1use std::sync::Arc;
2
3use stoat_permissions::ChannelPermission;
4pub use stoat_result::Error as StoatHttpError;
5
6use crate::types::RatelimitFailure;
7
8pub type Result<T, E = Error> = std::result::Result<T, E>;
9
10#[derive(Debug, Clone)]
11pub enum Error {
12    ReqwestError(Arc<reqwest::Error>),
13    HttpError(StoatHttpError),
14    RatelimitReached(RatelimitFailure),
15    WsError(Arc<tungstenite::Error>),
16    #[cfg(feature = "voice")]
17    LiveKit(Arc<livekit::RoomError>),
18    MissingParameter,
19    ConverterError(String),
20    Timeout,
21    BrokenChannel,
22    InternalError,
23    CheckFailure,
24    MissingChannelPermission {
25        permissions: ChannelPermission,
26    },
27    NotInServer,
28    NotInDM,
29    NotOwner,
30    NotNsfw,
31    InvalidTag,
32
33    NotAudioTrack,
34    NotVideoTrack,
35
36    Close,
37}
38
39impl From<reqwest::Error> for Error {
40    fn from(value: reqwest::Error) -> Self {
41        Self::ReqwestError(Arc::new(value))
42    }
43}
44
45impl From<tungstenite::Error> for Error {
46    fn from(value: tungstenite::Error) -> Self {
47        Self::WsError(Arc::new(value))
48    }
49}
50
51#[cfg(feature = "voice")]
52impl From<livekit::RoomError> for Error {
53    fn from(value: livekit::RoomError) -> Self {
54        Self::LiveKit(Arc::new(value))
55    }
56}
57
58#[cfg(feature = "voice")]
59impl From<livekit::webrtc::RtcError> for Error {
60    fn from(value: livekit::webrtc::RtcError) -> Self {
61        Self::LiveKit(Arc::new(livekit::RoomError::Rtc(value)))
62    }
63}