use crate::types::UID;
#[repr(u32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum WellKnownToken {
EndpointNotFound = 0,
Ping = 1,
UnauthorizedEndpoint = 2,
FirstAvailable = 3,
}
impl WellKnownToken {
pub const fn as_u32(self) -> u32 {
self as u32
}
pub const fn uid(self) -> UID {
UID::well_known(self as u32)
}
}
pub const WELL_KNOWN_RESERVED_COUNT: usize = 64;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_well_known_token_values() {
assert_eq!(WellKnownToken::EndpointNotFound.as_u32(), 0);
assert_eq!(WellKnownToken::Ping.as_u32(), 1);
assert_eq!(WellKnownToken::UnauthorizedEndpoint.as_u32(), 2);
assert_eq!(WellKnownToken::FirstAvailable.as_u32(), 3);
}
#[test]
fn test_well_known_uid() {
let uid = WellKnownToken::Ping.uid();
assert!(uid.is_well_known());
assert_eq!(uid.first, u64::MAX);
assert_eq!(uid.second, 1);
}
#[test]
fn test_reserved_count() {
assert!((WellKnownToken::FirstAvailable.as_u32() as usize) < WELL_KNOWN_RESERVED_COUNT);
}
}