use serde::{Deserialize, Serialize};
use std::fmt;
use thiserror::Error;
use tls_codec::{TlsDeserialize, TlsSerialize, TlsSize};
#[derive(
Debug,
Copy,
Clone,
PartialEq,
Eq,
PartialOrd,
Ord,
Serialize,
Deserialize,
TlsDeserialize,
TlsSerialize,
TlsSize,
)]
#[repr(u16)]
#[allow(missing_docs)]
pub enum ProtocolVersion {
Mls10 = 1,
Mls10Draft11 = 200, }
impl Default for ProtocolVersion {
fn default() -> Self {
ProtocolVersion::Mls10
}
}
impl TryFrom<u16> for ProtocolVersion {
type Error = VersionError;
fn try_from(v: u16) -> Result<Self, Self::Error> {
match v {
1 => Ok(ProtocolVersion::Mls10),
200 => Ok(ProtocolVersion::Mls10Draft11),
_ => Err(VersionError::UnsupportedMlsVersion),
}
}
}
impl fmt::Display for ProtocolVersion {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match &self {
ProtocolVersion::Mls10 => write!(f, "MLS 1.0"),
ProtocolVersion::Mls10Draft11 => write!(f, "MLS 1.0 (Draft 11)"),
}
}
}
#[derive(Error, Debug, PartialEq, Eq, Clone)]
pub enum VersionError {
#[error("Unsupported MLS version.")]
UnsupportedMlsVersion,
}