use std::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum Endpoint {
#[default]
Public,
Private,
PublicBeta,
PrivateBeta,
Level3,
}
impl Endpoint {
pub fn url(&self) -> &'static str {
match self {
Self::Public => "wss://ws.kraken.com/v2",
Self::Private => "wss://ws-auth.kraken.com/v2",
Self::PublicBeta => "wss://beta-ws.kraken.com/v2",
Self::PrivateBeta => "wss://beta-ws-auth.kraken.com/v2",
Self::Level3 => "wss://ws-l3.kraken.com/v2",
}
}
pub fn requires_auth(&self) -> bool {
matches!(self, Self::Private | Self::PrivateBeta)
}
}
impl fmt::Display for Endpoint {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.url())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_endpoint_urls() {
assert_eq!(Endpoint::Public.url(), "wss://ws.kraken.com/v2");
assert_eq!(Endpoint::Private.url(), "wss://ws-auth.kraken.com/v2");
}
#[test]
fn test_requires_auth() {
assert!(!Endpoint::Public.requires_auth());
assert!(Endpoint::Private.requires_auth());
assert!(!Endpoint::PublicBeta.requires_auth());
assert!(Endpoint::PrivateBeta.requires_auth());
}
}