Add support for room version 5.

This commit is contained in:
Jimmy Cuadra 2019-06-16 01:29:54 -07:00
parent 6de32b1b9c
commit 9506c565e0

View File

@ -38,12 +38,19 @@ pub struct RoomVersionId(InnerRoomVersionId);
enum InnerRoomVersionId { enum InnerRoomVersionId {
/// A version 1 room. /// A version 1 room.
Version1, Version1,
/// A version 2 room. /// A version 2 room.
Version2, Version2,
/// A version 3 room. /// A version 3 room.
Version3, Version3,
/// A version 4 room. /// A version 4 room.
Version4, Version4,
/// A version 5 room.
Version5,
/// A custom room version. /// A custom room version.
Custom(String), Custom(String),
} }
@ -72,6 +79,11 @@ impl RoomVersionId {
Self(InnerRoomVersionId::Version4) Self(InnerRoomVersionId::Version4)
} }
/// Creates a version 5 room ID.
pub fn version_5() -> Self {
Self(InnerRoomVersionId::Version5)
}
/// Creates a custom room version ID from the given string slice. /// Creates a custom room version ID from the given string slice.
pub fn custom(id: &str) -> Self { pub fn custom(id: &str) -> Self {
Self(InnerRoomVersionId::Custom(id.to_string())) Self(InnerRoomVersionId::Custom(id.to_string()))
@ -109,6 +121,11 @@ impl RoomVersionId {
pub fn is_version_4(&self) -> bool { pub fn is_version_4(&self) -> bool {
self.0 == InnerRoomVersionId::Version4 self.0 == InnerRoomVersionId::Version4
} }
/// Whether or not this is a version 5 room.
pub fn is_version_5(&self) -> bool {
self.0 == InnerRoomVersionId::Version5
}
} }
impl Display for RoomVersionId { impl Display for RoomVersionId {
@ -118,6 +135,7 @@ impl Display for RoomVersionId {
InnerRoomVersionId::Version2 => "2", InnerRoomVersionId::Version2 => "2",
InnerRoomVersionId::Version3 => "3", InnerRoomVersionId::Version3 => "3",
InnerRoomVersionId::Version4 => "4", InnerRoomVersionId::Version4 => "4",
InnerRoomVersionId::Version5 => "5",
InnerRoomVersionId::Custom(ref version) => version, InnerRoomVersionId::Custom(ref version) => version,
}; };
@ -153,6 +171,7 @@ impl<'a> TryFrom<&'a str> for RoomVersionId {
"2" => Self(InnerRoomVersionId::Version2), "2" => Self(InnerRoomVersionId::Version2),
"3" => Self(InnerRoomVersionId::Version3), "3" => Self(InnerRoomVersionId::Version3),
"4" => Self(InnerRoomVersionId::Version4), "4" => Self(InnerRoomVersionId::Version4),
"5" => Self(InnerRoomVersionId::Version5),
custom => { custom => {
if custom.is_empty() { if custom.is_empty() {
return Err(Error::MinimumLengthNotSatisfied); return Err(Error::MinimumLengthNotSatisfied);
@ -204,6 +223,7 @@ mod tests {
"1" "1"
); );
} }
#[test] #[test]
fn valid_version_2_room_version_id() { fn valid_version_2_room_version_id() {
assert_eq!( assert_eq!(
@ -213,6 +233,7 @@ mod tests {
"2" "2"
); );
} }
#[test] #[test]
fn valid_version_3_room_version_id() { fn valid_version_3_room_version_id() {
assert_eq!( assert_eq!(
@ -222,6 +243,7 @@ mod tests {
"3" "3"
); );
} }
#[test] #[test]
fn valid_version_4_room_version_id() { fn valid_version_4_room_version_id() {
assert_eq!( assert_eq!(
@ -232,6 +254,16 @@ mod tests {
); );
} }
#[test]
fn valid_version_5_room_version_id() {
assert_eq!(
RoomVersionId::try_from("5")
.expect("Failed to create RoomVersionId.")
.to_string(),
"5"
);
}
#[test] #[test]
fn valid_custom_room_version_id() { fn valid_custom_room_version_id() {
assert_eq!( assert_eq!(
@ -311,35 +343,42 @@ mod tests {
assert!(RoomVersionId::version_2().is_version_2()); assert!(RoomVersionId::version_2().is_version_2());
assert!(RoomVersionId::version_3().is_version_3()); assert!(RoomVersionId::version_3().is_version_3());
assert!(RoomVersionId::version_4().is_version_4()); assert!(RoomVersionId::version_4().is_version_4());
assert!(RoomVersionId::version_5().is_version_5());
assert!(RoomVersionId::custom("foo").is_custom()); assert!(RoomVersionId::custom("foo").is_custom());
} }
#[test] #[test]
#[allow(clippy::cognitive_complexity)]
fn predicate_methods() { fn predicate_methods() {
let version_1 = RoomVersionId::try_from("1").expect("Failed to create RoomVersionId."); let version_1 = RoomVersionId::try_from("1").expect("Failed to create RoomVersionId.");
let version_2 = RoomVersionId::try_from("2").expect("Failed to create RoomVersionId."); let version_2 = RoomVersionId::try_from("2").expect("Failed to create RoomVersionId.");
let version_3 = RoomVersionId::try_from("3").expect("Failed to create RoomVersionId."); let version_3 = RoomVersionId::try_from("3").expect("Failed to create RoomVersionId.");
let version_4 = RoomVersionId::try_from("4").expect("Failed to create RoomVersionId."); let version_4 = RoomVersionId::try_from("4").expect("Failed to create RoomVersionId.");
let version_5 = RoomVersionId::try_from("5").expect("Failed to create RoomVersionId.");
let custom = RoomVersionId::try_from("io.ruma.1").expect("Failed to create RoomVersionId."); let custom = RoomVersionId::try_from("io.ruma.1").expect("Failed to create RoomVersionId.");
assert!(version_1.is_version_1()); assert!(version_1.is_version_1());
assert!(version_2.is_version_2()); assert!(version_2.is_version_2());
assert!(version_3.is_version_3()); assert!(version_3.is_version_3());
assert!(version_4.is_version_4()); assert!(version_4.is_version_4());
assert!(version_5.is_version_5());
assert!(!version_1.is_version_2()); assert!(!version_1.is_version_2());
assert!(!version_1.is_version_3()); assert!(!version_1.is_version_3());
assert!(!version_1.is_version_4()); assert!(!version_1.is_version_4());
assert!(!version_1.is_version_5());
assert!(version_1.is_official()); assert!(version_1.is_official());
assert!(version_2.is_official()); assert!(version_2.is_official());
assert!(version_3.is_official()); assert!(version_3.is_official());
assert!(version_4.is_official()); assert!(version_4.is_official());
assert!(version_5.is_official());
assert!(!version_1.is_custom()); assert!(!version_1.is_custom());
assert!(!version_2.is_custom()); assert!(!version_2.is_custom());
assert!(!version_3.is_custom()); assert!(!version_3.is_custom());
assert!(!version_4.is_custom()); assert!(!version_4.is_custom());
assert!(!version_5.is_custom());
assert!(custom.is_custom()); assert!(custom.is_custom());
assert!(!custom.is_official()); assert!(!custom.is_official());
@ -347,5 +386,6 @@ mod tests {
assert!(!custom.is_version_2()); assert!(!custom.is_version_2());
assert!(!custom.is_version_3()); assert!(!custom.is_version_3());
assert!(!custom.is_version_4()); assert!(!custom.is_version_4());
assert!(!custom.is_version_5());
} }
} }