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 {
/// 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());
}
}