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}