///|
/// Wire semantics; legacy constructors continue to default to V12.
pub(all) enum Version {
V10
V11
V12
} derive(Debug, Eq)
///|
pub fn Version::wire(self : Version) -> String {
match self {
V10 => "1.0"
V11 => "1.1"
V12 => "1.2"
}
}
///|
pub fn parse_version(value : String) -> Version raise ProtocolError {
match value {
"1.0" => V10
"1.1" => V11
"1.2" => V12
_ => raise Invalid("unsupported STOMP version")
}
}
///|
fn offered_versions(value : String) -> Array[Version] raise ProtocolError {
let out : Array[Version] = []
for part in value.split(",") {
let version = parse_version(part.to_owned())
if out.contains(version) {
raise Invalid("duplicate offered version")
}
out.push(version)
}
if out.is_empty() || out.length() > 3 {
raise Invalid("invalid offered versions")
}
out
}
///|
pub extend Version with @debug.Debug::{to_repr}
///|
pub extend Version with Eq::{equal, not_equal}