From 9506c565e0fb959804a85d23880ea61a5a67709c Mon Sep 17 00:00:00 2001 From: Jimmy Cuadra Date: Sun, 16 Jun 2019 01:29:54 -0700 Subject: [PATCH] Add support for room version 5. --- src/room_version_id.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/room_version_id.rs b/src/room_version_id.rs index caa374e0..3928c91f 100644 --- a/src/room_version_id.rs +++ b/src/room_version_id.rs @@ -38,12 +38,19 @@ pub struct RoomVersionId(InnerRoomVersionId); enum InnerRoomVersionId { /// A version 1 room. Version1, + /// A version 2 room. Version2, + /// A version 3 room. Version3, + /// A version 4 room. Version4, + + /// A version 5 room. + Version5, + /// A custom room version. Custom(String), } @@ -72,6 +79,11 @@ impl RoomVersionId { 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. pub fn custom(id: &str) -> Self { Self(InnerRoomVersionId::Custom(id.to_string())) @@ -109,6 +121,11 @@ impl RoomVersionId { pub fn is_version_4(&self) -> bool { 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 { @@ -118,6 +135,7 @@ impl Display for RoomVersionId { InnerRoomVersionId::Version2 => "2", InnerRoomVersionId::Version3 => "3", InnerRoomVersionId::Version4 => "4", + InnerRoomVersionId::Version5 => "5", InnerRoomVersionId::Custom(ref version) => version, }; @@ -153,6 +171,7 @@ impl<'a> TryFrom<&'a str> for RoomVersionId { "2" => Self(InnerRoomVersionId::Version2), "3" => Self(InnerRoomVersionId::Version3), "4" => Self(InnerRoomVersionId::Version4), + "5" => Self(InnerRoomVersionId::Version5), custom => { if custom.is_empty() { return Err(Error::MinimumLengthNotSatisfied); @@ -204,6 +223,7 @@ mod tests { "1" ); } + #[test] fn valid_version_2_room_version_id() { assert_eq!( @@ -213,6 +233,7 @@ mod tests { "2" ); } + #[test] fn valid_version_3_room_version_id() { assert_eq!( @@ -222,6 +243,7 @@ mod tests { "3" ); } + #[test] fn valid_version_4_room_version_id() { 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] fn valid_custom_room_version_id() { assert_eq!( @@ -311,35 +343,42 @@ mod tests { assert!(RoomVersionId::version_2().is_version_2()); assert!(RoomVersionId::version_3().is_version_3()); assert!(RoomVersionId::version_4().is_version_4()); + assert!(RoomVersionId::version_5().is_version_5()); assert!(RoomVersionId::custom("foo").is_custom()); } #[test] + #[allow(clippy::cognitive_complexity)] fn predicate_methods() { 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_3 = RoomVersionId::try_from("3").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."); assert!(version_1.is_version_1()); assert!(version_2.is_version_2()); assert!(version_3.is_version_3()); assert!(version_4.is_version_4()); + assert!(version_5.is_version_5()); assert!(!version_1.is_version_2()); assert!(!version_1.is_version_3()); assert!(!version_1.is_version_4()); + assert!(!version_1.is_version_5()); assert!(version_1.is_official()); assert!(version_2.is_official()); assert!(version_3.is_official()); assert!(version_4.is_official()); + assert!(version_5.is_official()); assert!(!version_1.is_custom()); assert!(!version_2.is_custom()); assert!(!version_3.is_custom()); assert!(!version_4.is_custom()); + assert!(!version_5.is_custom()); assert!(custom.is_custom()); assert!(!custom.is_official()); @@ -347,5 +386,6 @@ mod tests { assert!(!custom.is_version_2()); assert!(!custom.is_version_3()); assert!(!custom.is_version_4()); + assert!(!custom.is_version_5()); } }