use weida_core::StopReason;
pub const NO_ERROR: u64 = 0;
pub const INTERNAL: u64 = 1;
pub const PROTOCOL_VIOLATION: u64 = 2;
pub const CANCELED: u64 = 3;
pub const NEGOTIATION_FAILED: u64 = 4;
pub const LIMIT_EXCEEDED: u64 = 5;
pub const SHUTDOWN: u64 = 6;
pub const REJECTED: u64 = 7;
pub const UNKNOWN_ENDPOINT: u64 = 8;
pub const UNSUPPORTED: u64 = 9;
pub const fn name(code: u64) -> &'static str {
match code {
NO_ERROR => "NO_ERROR",
INTERNAL => "INTERNAL",
PROTOCOL_VIOLATION => "PROTOCOL_VIOLATION",
CANCELED => "CANCELED",
NEGOTIATION_FAILED => "NEGOTIATION_FAILED",
LIMIT_EXCEEDED => "LIMIT_EXCEEDED",
SHUTDOWN => "SHUTDOWN",
REJECTED => "REJECTED",
UNKNOWN_ENDPOINT => "UNKNOWN_ENDPOINT",
UNSUPPORTED => "UNSUPPORTED",
_ => "UNKNOWN",
}
}
pub const fn stop_reason(code: u64) -> StopReason {
match code {
REJECTED => StopReason::Rejected,
CANCELED => StopReason::Canceled,
UNKNOWN_ENDPOINT => StopReason::UnknownEndpoint,
UNSUPPORTED => StopReason::Unsupported,
LIMIT_EXCEEDED => StopReason::LimitExceeded,
SHUTDOWN => StopReason::ShuttingDown,
other => StopReason::Other(other),
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn codes_match_the_protocol_document() {
assert_eq!(
[
NO_ERROR,
INTERNAL,
PROTOCOL_VIOLATION,
CANCELED,
NEGOTIATION_FAILED,
LIMIT_EXCEEDED,
SHUTDOWN,
REJECTED,
UNKNOWN_ENDPOINT,
UNSUPPORTED
],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
);
}
#[test]
fn names_are_defined_for_known_codes() {
assert_eq!(name(PROTOCOL_VIOLATION), "PROTOCOL_VIOLATION");
assert_eq!(name(NEGOTIATION_FAILED), "NEGOTIATION_FAILED");
assert_eq!(name(UNSUPPORTED), "UNSUPPORTED");
assert_eq!(name(10), "UNKNOWN");
}
#[test]
fn stop_reasons_map_the_refusal_codes() {
assert_eq!(stop_reason(REJECTED), StopReason::Rejected);
assert_eq!(stop_reason(CANCELED), StopReason::Canceled);
assert_eq!(stop_reason(UNKNOWN_ENDPOINT), StopReason::UnknownEndpoint);
assert_eq!(stop_reason(UNSUPPORTED), StopReason::Unsupported);
assert_eq!(stop_reason(LIMIT_EXCEEDED), StopReason::LimitExceeded);
assert_eq!(stop_reason(SHUTDOWN), StopReason::ShuttingDown);
assert_eq!(stop_reason(42), StopReason::Other(42));
}
}