use crate::version::DraftVersion;
#[allow(unused_variables)]
pub fn message_type_name(draft: u8, id: u64) -> Option<&'static str> {
match DraftVersion::from_number(draft)? {
#[cfg(feature = "draft07")]
DraftVersion::Draft07 => {
crate::draft07::message::MessageType::from_id(id).map(|t| t.name())
}
#[cfg(feature = "draft08")]
DraftVersion::Draft08 => {
crate::draft08::message::MessageType::from_id(id).map(|t| t.name())
}
#[cfg(feature = "draft09")]
DraftVersion::Draft09 => {
crate::draft09::message::MessageType::from_id(id).map(|t| t.name())
}
#[cfg(feature = "draft10")]
DraftVersion::Draft10 => {
crate::draft10::message::MessageType::from_id(id).map(|t| t.name())
}
#[cfg(feature = "draft11")]
DraftVersion::Draft11 => {
crate::draft11::message::MessageType::from_id(id).map(|t| t.name())
}
#[cfg(feature = "draft12")]
DraftVersion::Draft12 => {
crate::draft12::message::MessageType::from_id(id).map(|t| t.name())
}
#[cfg(feature = "draft13")]
DraftVersion::Draft13 => {
crate::draft13::message::MessageType::from_id(id).map(|t| t.name())
}
#[cfg(feature = "draft14")]
DraftVersion::Draft14 => {
crate::draft14::message::MessageType::from_id(id).map(|t| t.name())
}
#[cfg(feature = "draft15")]
DraftVersion::Draft15 => {
crate::draft15::message::MessageType::from_id(id).map(|t| t.name())
}
#[cfg(feature = "draft16")]
DraftVersion::Draft16 => {
crate::draft16::message::MessageType::from_id(id).map(|t| t.name())
}
#[cfg(feature = "draft17")]
DraftVersion::Draft17 => {
crate::draft17::message::MessageType::from_id(id).map(|t| t.name())
}
#[cfg(feature = "draft18")]
DraftVersion::Draft18 => {
crate::draft18::message::MessageType::from_id(id).map(|t| t.name())
}
#[cfg(feature = "draft19")]
DraftVersion::Draft19 => {
crate::draft19::message::MessageType::from_id(id).map(|t| t.name())
}
#[cfg(feature = "draft20")]
DraftVersion::Draft20 => {
crate::draft20::message::MessageType::from_id(id).map(|t| t.name())
}
#[allow(unreachable_patterns)]
_ => None,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[cfg(all(feature = "draft07", feature = "draft14", feature = "draft20"))]
#[test]
fn reused_ids_answer_per_draft() {
let reused: [(u64, [(u8, &str); 3]); 4] = [
(0x07, [(7, "announce_ok"), (14, "publish_namespace_ok"), (20, "request_ok")]),
(0x08, [(7, "announce_error"), (14, "publish_namespace_error"), (20, "namespace")]),
(0x0E, [(7, "track_status"), (14, "track_status_ok"), (20, "namespace_done")]),
(0x0B, [(7, "subscribe_done"), (14, "publish_done"), (20, "publish_done")]),
];
for (id, expected) in reused {
for (draft, name) in expected {
assert_eq!(message_type_name(draft, id), Some(name), "draft-{draft} {id:#x}");
}
}
}
#[test]
fn none_outside_the_implemented_drafts() {
for draft in [0u8, 6, 21, 255] {
assert_eq!(message_type_name(draft, 0x03), None, "draft {draft}");
}
}
#[test]
fn none_for_an_unassigned_id() {
for draft in 7..=20u8 {
assert_eq!(message_type_name(draft, 0x3F), None, "draft-{draft}");
}
}
}