use ntgcalls_sys as sys;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Error {
Rtc,
SdpParse,
TransportParse,
RtmpStreamingUnsupported,
Connection,
ConnectionNotFound,
ConnectionError,
CryptoError,
TelegramServerError,
RtcConnectionNeeded,
InvalidParams,
Signaling,
SignalingError,
SignalingUnsupported,
Media,
FileError,
FfmpegError,
ShellError,
MediaDeviceError,
Unknown(i32),
}
impl std::fmt::Display for Error {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{self:?}")
}
}
impl std::error::Error for Error {}
pub type Result<T> = std::result::Result<T, Error>;
pub(crate) fn check(code: sys::ntg_result) -> Result<()> {
match code {
sys::NTG_OK => Ok(()),
sys::NTG_ERR_RTC => Err(Error::Rtc),
sys::NTG_ERR_SDP_PARSE => Err(Error::SdpParse),
sys::NTG_ERR_TRANSPORT_PARSE => Err(Error::TransportParse),
sys::NTG_ERR_RTMP_STREAMING_UNSUPPORTED => Err(Error::RtmpStreamingUnsupported),
sys::NTG_ERR_CONNECTION => Err(Error::Connection),
sys::NTG_ERR_CONNECTION_NOT_FOUND => Err(Error::ConnectionNotFound),
sys::NTG_ERR_CONNECTION_ERROR => Err(Error::ConnectionError),
sys::NTG_ERR_CRYPTO_ERROR => Err(Error::CryptoError),
sys::NTG_ERR_TELEGRAM_SERVER_ERROR => Err(Error::TelegramServerError),
sys::NTG_ERR_RTC_CONNECTION_NEEDED => Err(Error::RtcConnectionNeeded),
sys::NTG_ERR_INVALID_PARAMS => Err(Error::InvalidParams),
sys::NTG_ERR_SIGNALING => Err(Error::Signaling),
sys::NTG_ERR_SIGNALING_ERROR => Err(Error::SignalingError),
sys::NTG_ERR_SIGNALING_UNSUPPORTED => Err(Error::SignalingUnsupported),
sys::NTG_ERR_MEDIA => Err(Error::Media),
sys::NTG_ERR_FILE_ERROR => Err(Error::FileError),
sys::NTG_ERR_FFMPEG_ERROR => Err(Error::FfmpegError),
sys::NTG_ERR_SHELL_ERROR => Err(Error::ShellError),
sys::NTG_ERR_MEDIA_DEVICE_ERROR => Err(Error::MediaDeviceError),
other => Err(Error::Unknown(other)),
}
}