#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u64)]
pub enum SessionErrorCode {
NoError = 0x0,
InternalError = 0x1,
Unauthorized = 0x2,
ProtocolViolation = 0x3,
InvalidRequestId = 0x4,
DuplicateTrackAlias = 0x5,
KeyValueFormattingError = 0x6,
TooManyRequests = 0x7,
InvalidPath = 0x8,
MalformedPath = 0x9,
GoawayTimeout = 0x10,
ControlMessageTimeout = 0x11,
DataStreamTimeout = 0x12,
AuthTokenCacheOverflow = 0x13,
DuplicateAuthTokenAlias = 0x14,
VersionNegotiationFailed = 0x15,
MalformedAuthToken = 0x16,
UnknownAuthTokenAlias = 0x17,
ExpiredAuthToken = 0x18,
InvalidAuthority = 0x19,
MalformedAuthority = 0x1A,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u64)]
pub enum RequestErrorCode {
InternalError = 0x0,
Unauthorized = 0x1,
Timeout = 0x2,
NotSupported = 0x3,
MalformedAuthToken = 0x4,
ExpiredAuthToken = 0x5,
DoesNotExist = 0x10,
InvalidRange = 0x11,
MalformedTrack = 0x12,
Uninterested = 0x20,
PrefixOverlap = 0x30,
InvalidJoiningRequestId = 0x32,
UnknownStatusInRange = 0x33,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u64)]
pub enum PublishDoneStatusCode {
InternalError = 0x0,
Unauthorized = 0x1,
TrackEnded = 0x2,
SubscriptionEnded = 0x3,
GoingAway = 0x4,
Expired = 0x5,
TooFarBehind = 0x6,
MalformedTrack = 0x7,
UpdateFailed = 0x8,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u64)]
pub enum DataStreamResetErrorCode {
InternalError = 0x0,
Cancelled = 0x1,
DeliveryTimeout = 0x2,
SessionClosed = 0x3,
}
impl SessionErrorCode {
pub const ALL: &[SessionErrorCode] = &[
SessionErrorCode::NoError,
SessionErrorCode::InternalError,
SessionErrorCode::Unauthorized,
SessionErrorCode::ProtocolViolation,
SessionErrorCode::InvalidRequestId,
SessionErrorCode::DuplicateTrackAlias,
SessionErrorCode::KeyValueFormattingError,
SessionErrorCode::TooManyRequests,
SessionErrorCode::InvalidPath,
SessionErrorCode::MalformedPath,
SessionErrorCode::GoawayTimeout,
SessionErrorCode::ControlMessageTimeout,
SessionErrorCode::DataStreamTimeout,
SessionErrorCode::AuthTokenCacheOverflow,
SessionErrorCode::DuplicateAuthTokenAlias,
SessionErrorCode::VersionNegotiationFailed,
SessionErrorCode::MalformedAuthToken,
SessionErrorCode::UnknownAuthTokenAlias,
SessionErrorCode::ExpiredAuthToken,
SessionErrorCode::InvalidAuthority,
SessionErrorCode::MalformedAuthority,
];
pub fn from_u64(v: u64) -> Option<Self> {
match v {
0x0 => Some(SessionErrorCode::NoError),
0x1 => Some(SessionErrorCode::InternalError),
0x2 => Some(SessionErrorCode::Unauthorized),
0x3 => Some(SessionErrorCode::ProtocolViolation),
0x4 => Some(SessionErrorCode::InvalidRequestId),
0x5 => Some(SessionErrorCode::DuplicateTrackAlias),
0x6 => Some(SessionErrorCode::KeyValueFormattingError),
0x7 => Some(SessionErrorCode::TooManyRequests),
0x8 => Some(SessionErrorCode::InvalidPath),
0x9 => Some(SessionErrorCode::MalformedPath),
0x10 => Some(SessionErrorCode::GoawayTimeout),
0x11 => Some(SessionErrorCode::ControlMessageTimeout),
0x12 => Some(SessionErrorCode::DataStreamTimeout),
0x13 => Some(SessionErrorCode::AuthTokenCacheOverflow),
0x14 => Some(SessionErrorCode::DuplicateAuthTokenAlias),
0x15 => Some(SessionErrorCode::VersionNegotiationFailed),
0x16 => Some(SessionErrorCode::MalformedAuthToken),
0x17 => Some(SessionErrorCode::UnknownAuthTokenAlias),
0x18 => Some(SessionErrorCode::ExpiredAuthToken),
0x19 => Some(SessionErrorCode::InvalidAuthority),
0x1A => Some(SessionErrorCode::MalformedAuthority),
_ => None,
}
}
pub fn as_u64(self) -> u64 {
self as u64
}
}
impl RequestErrorCode {
pub const ALL: &[RequestErrorCode] = &[
RequestErrorCode::InternalError,
RequestErrorCode::Unauthorized,
RequestErrorCode::Timeout,
RequestErrorCode::NotSupported,
RequestErrorCode::MalformedAuthToken,
RequestErrorCode::ExpiredAuthToken,
RequestErrorCode::DoesNotExist,
RequestErrorCode::InvalidRange,
RequestErrorCode::MalformedTrack,
RequestErrorCode::Uninterested,
RequestErrorCode::PrefixOverlap,
RequestErrorCode::InvalidJoiningRequestId,
RequestErrorCode::UnknownStatusInRange,
];
pub fn from_u64(v: u64) -> Option<Self> {
match v {
0x0 => Some(RequestErrorCode::InternalError),
0x1 => Some(RequestErrorCode::Unauthorized),
0x2 => Some(RequestErrorCode::Timeout),
0x3 => Some(RequestErrorCode::NotSupported),
0x4 => Some(RequestErrorCode::MalformedAuthToken),
0x5 => Some(RequestErrorCode::ExpiredAuthToken),
0x10 => Some(RequestErrorCode::DoesNotExist),
0x11 => Some(RequestErrorCode::InvalidRange),
0x12 => Some(RequestErrorCode::MalformedTrack),
0x20 => Some(RequestErrorCode::Uninterested),
0x30 => Some(RequestErrorCode::PrefixOverlap),
0x32 => Some(RequestErrorCode::InvalidJoiningRequestId),
0x33 => Some(RequestErrorCode::UnknownStatusInRange),
_ => None,
}
}
pub fn as_u64(self) -> u64 {
self as u64
}
}
impl PublishDoneStatusCode {
pub const ALL: &[PublishDoneStatusCode] = &[
PublishDoneStatusCode::InternalError,
PublishDoneStatusCode::Unauthorized,
PublishDoneStatusCode::TrackEnded,
PublishDoneStatusCode::SubscriptionEnded,
PublishDoneStatusCode::GoingAway,
PublishDoneStatusCode::Expired,
PublishDoneStatusCode::TooFarBehind,
PublishDoneStatusCode::MalformedTrack,
PublishDoneStatusCode::UpdateFailed,
];
pub fn from_u64(v: u64) -> Option<Self> {
match v {
0x0 => Some(PublishDoneStatusCode::InternalError),
0x1 => Some(PublishDoneStatusCode::Unauthorized),
0x2 => Some(PublishDoneStatusCode::TrackEnded),
0x3 => Some(PublishDoneStatusCode::SubscriptionEnded),
0x4 => Some(PublishDoneStatusCode::GoingAway),
0x5 => Some(PublishDoneStatusCode::Expired),
0x6 => Some(PublishDoneStatusCode::TooFarBehind),
0x7 => Some(PublishDoneStatusCode::MalformedTrack),
0x8 => Some(PublishDoneStatusCode::UpdateFailed),
_ => None,
}
}
pub fn as_u64(self) -> u64 {
self as u64
}
}
impl DataStreamResetErrorCode {
pub const ALL: &[DataStreamResetErrorCode] = &[
DataStreamResetErrorCode::InternalError,
DataStreamResetErrorCode::Cancelled,
DataStreamResetErrorCode::DeliveryTimeout,
DataStreamResetErrorCode::SessionClosed,
];
pub fn from_u64(v: u64) -> Option<Self> {
match v {
0x0 => Some(DataStreamResetErrorCode::InternalError),
0x1 => Some(DataStreamResetErrorCode::Cancelled),
0x2 => Some(DataStreamResetErrorCode::DeliveryTimeout),
0x3 => Some(DataStreamResetErrorCode::SessionClosed),
_ => None,
}
}
pub fn as_u64(self) -> u64 {
self as u64
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn round_trips_known_codes() {
assert_eq!(SessionErrorCode::from_u64(0x1A), Some(SessionErrorCode::MalformedAuthority));
assert_eq!(SessionErrorCode::MalformedAuthority.as_u64(), 0x1A);
assert_eq!(RequestErrorCode::from_u64(0x33), Some(RequestErrorCode::UnknownStatusInRange));
assert_eq!(RequestErrorCode::UnknownStatusInRange.as_u64(), 0x33);
assert_eq!(PublishDoneStatusCode::from_u64(0x8), Some(PublishDoneStatusCode::UpdateFailed));
assert_eq!(PublishDoneStatusCode::UpdateFailed.as_u64(), 0x8);
assert_eq!(
DataStreamResetErrorCode::from_u64(0x3),
Some(DataStreamResetErrorCode::SessionClosed)
);
assert_eq!(DataStreamResetErrorCode::SessionClosed.as_u64(), 0x3);
}
#[test]
fn unknown_codes_decode_to_none() {
assert_eq!(SessionErrorCode::from_u64(0xA), None);
assert_eq!(SessionErrorCode::from_u64(0x1B), None);
assert_eq!(RequestErrorCode::from_u64(0x31), None);
assert_eq!(PublishDoneStatusCode::from_u64(0x9), None);
assert_eq!(DataStreamResetErrorCode::from_u64(0x4), None);
assert_eq!(SessionErrorCode::from_u64(u64::MAX), None);
}
}