Update Diesel integration to Diesel 1.0.
This commit is contained in:
		
							parent
							
								
									7ba979a411
								
							
						
					
					
						commit
						78b0d1e054
					
				
							
								
								
									
										267
									
								
								src/lib.rs
									
									
									
									
									
								
							
							
						
						
									
										267
									
								
								src/lib.rs
									
									
									
									
									
								
							| @ -14,20 +14,21 @@ extern crate serde; | ||||
| extern crate url; | ||||
| 
 | ||||
| #[cfg(feature = "diesel")] | ||||
| #[macro_use] | ||||
| extern crate diesel; | ||||
| 
 | ||||
| #[cfg(test)] | ||||
| extern crate serde_json; | ||||
| 
 | ||||
| use std::error::Error as StdError; | ||||
| use std::convert::TryFrom; | ||||
| use std::error::Error as StdError; | ||||
| use std::fmt::{Display, Formatter, Result as FmtResult}; | ||||
| 
 | ||||
| use rand::{Rng, thread_rng}; | ||||
| use rand::distributions::Alphanumeric; | ||||
| use rand::{thread_rng, Rng}; | ||||
| use regex::Regex; | ||||
| use serde::{Deserialize, Deserializer, Serialize, Serializer}; | ||||
| use serde::de::{Error as SerdeError, Unexpected, Visitor}; | ||||
| use serde::{Deserialize, Deserializer, Serialize, Serializer}; | ||||
| use url::{ParseError, Url}; | ||||
| 
 | ||||
| pub use url::Host; | ||||
| @ -81,6 +82,7 @@ pub enum Error { | ||||
| /// );
 | ||||
| /// ```
 | ||||
| #[derive(Clone, Debug, Eq, Hash, PartialEq)] | ||||
| #[cfg_attr(feature = "diesel", derive(FromSqlRow))] | ||||
| pub struct EventId { | ||||
|     hostname: Host, | ||||
|     opaque_id: String, | ||||
| @ -102,6 +104,7 @@ pub struct EventId { | ||||
| /// );
 | ||||
| /// ```
 | ||||
| #[derive(Clone, Debug, Eq, Hash, PartialEq)] | ||||
| #[cfg_attr(feature = "diesel", derive(FromSqlRow))] | ||||
| pub struct RoomAliasId { | ||||
|     alias: String, | ||||
|     hostname: Host, | ||||
| @ -123,6 +126,7 @@ pub struct RoomAliasId { | ||||
| /// );
 | ||||
| /// ```
 | ||||
| #[derive(Clone, Debug, Eq, Hash, PartialEq)] | ||||
| #[cfg_attr(feature = "diesel", derive(FromSqlRow))] | ||||
| pub struct RoomId { | ||||
|     hostname: Host, | ||||
|     opaque_id: String, | ||||
| @ -149,6 +153,7 @@ pub struct RoomId { | ||||
| ///     "!n8f893n9:example.com"
 | ||||
| /// );
 | ||||
| #[derive(Clone, Debug, Eq, Hash, PartialEq)] | ||||
| #[cfg_attr(feature = "diesel", derive(FromSqlRow))] | ||||
| pub enum RoomIdOrAliasId { | ||||
|     /// A Matrix room alias ID.
 | ||||
|     RoomAliasId(RoomAliasId), | ||||
| @ -171,6 +176,7 @@ pub enum RoomIdOrAliasId { | ||||
| /// );
 | ||||
| /// ```
 | ||||
| #[derive(Clone, Debug, Eq, Hash, PartialEq)] | ||||
| #[cfg_attr(feature = "diesel", derive(FromSqlRow))] | ||||
| pub struct UserId { | ||||
|     hostname: Host, | ||||
|     localpart: String, | ||||
| @ -183,8 +189,13 @@ struct RoomIdVisitor; | ||||
| struct RoomIdOrAliasIdVisitor; | ||||
| struct UserIdVisitor; | ||||
| 
 | ||||
| fn display(f: &mut Formatter, sigil: char, localpart: &str, hostname: &Host, port: u16) | ||||
| -> FmtResult { | ||||
| fn display( | ||||
|     f: &mut Formatter, | ||||
|     sigil: char, | ||||
|     localpart: &str, | ||||
|     hostname: &Host, | ||||
|     port: u16, | ||||
| ) -> FmtResult { | ||||
|     if port == 443 { | ||||
|         write!(f, "{}{}:{}", sigil, localpart, hostname) | ||||
|     } else { | ||||
| @ -193,7 +204,10 @@ fn display(f: &mut Formatter, sigil: char, localpart: &str, hostname: &Host, por | ||||
| } | ||||
| 
 | ||||
| fn generate_localpart(length: usize) -> String { | ||||
|     thread_rng().sample_iter(&Alphanumeric).take(length).collect() | ||||
|     thread_rng() | ||||
|         .sample_iter(&Alphanumeric) | ||||
|         .take(length) | ||||
|         .collect() | ||||
| } | ||||
| 
 | ||||
| fn validate_id<'a>(id: &'a str) -> Result<(), Error> { | ||||
| @ -406,9 +420,13 @@ impl Display for RoomId { | ||||
| impl Display for RoomIdOrAliasId { | ||||
|     fn fmt(&self, f: &mut Formatter) -> FmtResult { | ||||
|         match *self { | ||||
|             RoomIdOrAliasId::RoomAliasId(ref room_alias_id) => { | ||||
|                 display(f, '#', &room_alias_id.alias, &room_alias_id.hostname, room_alias_id.port) | ||||
|             } | ||||
|             RoomIdOrAliasId::RoomAliasId(ref room_alias_id) => display( | ||||
|                 f, | ||||
|                 '#', | ||||
|                 &room_alias_id.alias, | ||||
|                 &room_alias_id.hostname, | ||||
|                 room_alias_id.port, | ||||
|             ), | ||||
|             RoomIdOrAliasId::RoomId(ref room_id) => { | ||||
|                 display(f, '!', &room_id.opaque_id, &room_id.hostname, room_id.port) | ||||
|             } | ||||
| @ -423,68 +441,96 @@ impl Display for UserId { | ||||
| } | ||||
| 
 | ||||
| impl Serialize for EventId { | ||||
|     fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer { | ||||
|     fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> | ||||
|     where | ||||
|         S: Serializer, | ||||
|     { | ||||
|         serializer.serialize_str(&self.to_string()) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl Serialize for RoomAliasId { | ||||
|     fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer { | ||||
|     fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> | ||||
|     where | ||||
|         S: Serializer, | ||||
|     { | ||||
|         serializer.serialize_str(&self.to_string()) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl Serialize for RoomId { | ||||
|     fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer { | ||||
|     fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> | ||||
|     where | ||||
|         S: Serializer, | ||||
|     { | ||||
|         serializer.serialize_str(&self.to_string()) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl Serialize for RoomIdOrAliasId { | ||||
|     fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer { | ||||
|     fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> | ||||
|     where | ||||
|         S: Serializer, | ||||
|     { | ||||
|         match *self { | ||||
|             RoomIdOrAliasId::RoomAliasId(ref room_alias_id) => { | ||||
|                 serializer.serialize_str(&room_alias_id.to_string()) | ||||
|             } | ||||
|             RoomIdOrAliasId::RoomId(ref room_id) => { | ||||
|                 serializer.serialize_str(&room_id.to_string()) | ||||
|             } | ||||
|             RoomIdOrAliasId::RoomId(ref room_id) => serializer.serialize_str(&room_id.to_string()), | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl Serialize for UserId { | ||||
|     fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer { | ||||
|     fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> | ||||
|     where | ||||
|         S: Serializer, | ||||
|     { | ||||
|         serializer.serialize_str(&self.to_string()) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl<'de> Deserialize<'de> for EventId { | ||||
|     fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de> { | ||||
|     fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> | ||||
|     where | ||||
|         D: Deserializer<'de>, | ||||
|     { | ||||
|         deserializer.deserialize_any(EventIdVisitor) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl<'de> Deserialize<'de> for RoomAliasId { | ||||
|     fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de> { | ||||
|     fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> | ||||
|     where | ||||
|         D: Deserializer<'de>, | ||||
|     { | ||||
|         deserializer.deserialize_any(RoomAliasIdVisitor) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl<'de> Deserialize<'de> for RoomId { | ||||
|     fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de> { | ||||
|     fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> | ||||
|     where | ||||
|         D: Deserializer<'de>, | ||||
|     { | ||||
|         deserializer.deserialize_any(RoomIdVisitor) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl<'de> Deserialize<'de> for RoomIdOrAliasId { | ||||
|     fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de> { | ||||
|     fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> | ||||
|     where | ||||
|         D: Deserializer<'de>, | ||||
|     { | ||||
|         deserializer.deserialize_any(RoomIdOrAliasIdVisitor) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl<'de> Deserialize<'de> for UserId { | ||||
|     fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de> { | ||||
|     fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> | ||||
|     where | ||||
|         D: Deserializer<'de>, | ||||
|     { | ||||
|         deserializer.deserialize_any(UserIdVisitor) | ||||
|     } | ||||
| } | ||||
| @ -567,7 +613,7 @@ impl<'a> TryFrom<&'a str> for RoomIdOrAliasId { | ||||
|                 let room_id = RoomId::try_from(room_id_or_alias_id)?; | ||||
|                 Ok(RoomIdOrAliasId::RoomId(room_id)) | ||||
|             } | ||||
|             _ => Err(Error::MissingSigil) | ||||
|             _ => Err(Error::MissingSigil), | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -602,7 +648,10 @@ impl<'de> Visitor<'de> for EventIdVisitor { | ||||
|         write!(formatter, "a Matrix event ID as a string") | ||||
|     } | ||||
| 
 | ||||
|     fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: SerdeError { | ||||
|     fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> | ||||
|     where | ||||
|         E: SerdeError, | ||||
|     { | ||||
|         match EventId::try_from(v) { | ||||
|             Ok(event_id) => Ok(event_id), | ||||
|             Err(_) => Err(SerdeError::invalid_value(Unexpected::Str(v), &self)), | ||||
| @ -617,7 +666,10 @@ impl<'de> Visitor<'de> for RoomAliasIdVisitor { | ||||
|         write!(formatter, "a Matrix room alias ID as a string") | ||||
|     } | ||||
| 
 | ||||
|     fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: SerdeError { | ||||
|     fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> | ||||
|     where | ||||
|         E: SerdeError, | ||||
|     { | ||||
|         match RoomAliasId::try_from(v) { | ||||
|             Ok(room_alias_id) => Ok(room_alias_id), | ||||
|             Err(_) => Err(SerdeError::invalid_value(Unexpected::Str(v), &self)), | ||||
| @ -632,7 +684,10 @@ impl<'de> Visitor<'de> for RoomIdVisitor { | ||||
|         write!(formatter, "a Matrix room ID as a string") | ||||
|     } | ||||
| 
 | ||||
|     fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: SerdeError { | ||||
|     fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> | ||||
|     where | ||||
|         E: SerdeError, | ||||
|     { | ||||
|         match RoomId::try_from(v) { | ||||
|             Ok(room_id) => Ok(room_id), | ||||
|             Err(_) => Err(SerdeError::invalid_value(Unexpected::Str(v), &self)), | ||||
| @ -647,7 +702,10 @@ impl<'de> Visitor<'de> for RoomIdOrAliasIdVisitor { | ||||
|         write!(formatter, "a Matrix room ID or room alias ID as a string") | ||||
|     } | ||||
| 
 | ||||
|     fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: SerdeError { | ||||
|     fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> | ||||
|     where | ||||
|         E: SerdeError, | ||||
|     { | ||||
|         match RoomIdOrAliasId::try_from(v) { | ||||
|             Ok(room_id_or_alias_id) => Ok(room_id_or_alias_id), | ||||
|             Err(_) => Err(SerdeError::invalid_value(Unexpected::Str(v), &self)), | ||||
| @ -662,7 +720,10 @@ impl<'de> Visitor<'de> for UserIdVisitor { | ||||
|         write!(formatter, "a Matrix user ID as a string") | ||||
|     } | ||||
| 
 | ||||
|     fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: SerdeError { | ||||
|     fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> | ||||
|     where | ||||
|         E: SerdeError, | ||||
|     { | ||||
|         match UserId::try_from(v) { | ||||
|             Ok(user_id) => Ok(user_id), | ||||
|             Err(_) => Err(SerdeError::invalid_value(Unexpected::Str(v), &self)), | ||||
| @ -673,88 +734,37 @@ impl<'de> Visitor<'de> for UserIdVisitor { | ||||
| #[cfg(feature = "diesel")] | ||||
| mod diesel_integration { | ||||
|     use std::convert::TryFrom; | ||||
|     use std::error::Error; | ||||
|     use std::error::Error as StdError; | ||||
|     use std::io::Write; | ||||
| 
 | ||||
|     use diesel::Queryable; | ||||
|     use diesel::backend::Backend; | ||||
|     use diesel::expression::AsExpression; | ||||
|     use diesel::expression::bound::Bound; | ||||
|     use diesel::row::Row; | ||||
|     use diesel::types::{FromSql, FromSqlRow, HasSqlType, IsNull, Nullable, Text, ToSql}; | ||||
|     use diesel::deserialize::{FromSql, Result as DeserializeResult}; | ||||
|     use diesel::serialize::{Output, Result as SerializeResult, ToSql}; | ||||
|     use diesel::sql_types::Text; | ||||
| 
 | ||||
|     macro_rules! diesel_impl { | ||||
|         ($name:ident) => { | ||||
|             impl<A, DB> FromSql<A, DB> for $crate::$name | ||||
|             where DB: Backend + HasSqlType<A>, String: FromSql<A, DB> { | ||||
|                 fn from_sql(bytes: Option<&DB::RawValue>) | ||||
|                 -> Result<Self, Box<Error + Send + Sync>> { | ||||
|                     let string = <String as FromSql<A, DB>>::from_sql(bytes)?; | ||||
| 
 | ||||
|                     $crate::$name::try_from(&string) | ||||
|                         .map_err(|error| Box::new(error) as Box<Error + Send + Sync>) | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             impl<A, DB> FromSqlRow<A, DB> for $crate::$name | ||||
|             where DB: Backend + HasSqlType<A>, String: FromSql<A, DB> { | ||||
|                 fn build_from_row<T: Row<DB>>(row: &mut T) | ||||
|                 -> Result<Self, Box<Error + Send + Sync>> { | ||||
|                     FromSql::<A, DB>::from_sql(row.take()) | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             impl<A, DB> ToSql<A, DB> for $crate::$name | ||||
|             where DB: Backend + HasSqlType<A>, String: ToSql<A, DB> { | ||||
|                 fn to_sql<W: Write>(&self, out: &mut W) | ||||
|                 -> Result<IsNull, Box<Error + Send + Sync>> { | ||||
|                     self.to_string().to_sql(out) | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             impl<A, DB> Queryable<A, DB> for $crate::$name where | ||||
|                 $crate::$name: FromSqlRow<A, DB>, | ||||
|                 DB: Backend + HasSqlType<A>, | ||||
|             impl<DB> ToSql<Text, DB> for $crate::$name | ||||
|             where | ||||
|                 DB: Backend, | ||||
|             { | ||||
|                 type Row = Self; | ||||
| 
 | ||||
|                 fn build(row: Self::Row) -> Self { | ||||
|                     row | ||||
|                 fn to_sql<W: Write>(&self, out: &mut Output<W, DB>) -> SerializeResult { | ||||
|                     ToSql::<Text, DB>::to_sql(&self.to_string(), out) | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             impl AsExpression<Text> for $crate::$name { | ||||
|                 type Expression = Bound<Text, Self>; | ||||
|             impl<DB> FromSql<Text, DB> for $crate::$name | ||||
|             where | ||||
|                 DB: Backend<RawValue = [u8]>, | ||||
|             { | ||||
|                 fn from_sql(bytes: Option<&[u8]>) -> DeserializeResult<Self> { | ||||
|                     let string: String = FromSql::<Text, DB>::from_sql(bytes)?; | ||||
| 
 | ||||
|                 fn as_expression(self) -> Self::Expression { | ||||
|                     Bound::new(self) | ||||
|                     $crate::$name::try_from(string.as_str()) | ||||
|                         .map_err(|error| Box::new(error) as Box<StdError + Send + Sync>) | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             impl<'a> AsExpression<Text> for &'a $crate::$name { | ||||
|                 type Expression = Bound<Text, Self>; | ||||
| 
 | ||||
|                 fn as_expression(self) -> Self::Expression { | ||||
|                     Bound::new(self) | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             impl AsExpression<Nullable<Text>> for $crate::$name { | ||||
|                 type Expression = Bound<Nullable<Text>, Self>; | ||||
| 
 | ||||
|                 fn as_expression(self) -> Self::Expression { | ||||
|                     Bound::new(self) | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             impl<'a> AsExpression<Nullable<Text>> for &'a $crate::$name { | ||||
|                 type Expression = Bound<Nullable<Text>, Self>; | ||||
| 
 | ||||
|                 fn as_expression(self) -> Self::Expression { | ||||
|                     Bound::new(self) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         }; | ||||
|     } | ||||
| 
 | ||||
|     diesel_impl!(EventId); | ||||
| @ -810,9 +820,8 @@ mod tests { | ||||
|     #[test] | ||||
|     fn deserialize_valid_event_id() { | ||||
|         assert_eq!( | ||||
|             from_str::<EventId>( | ||||
|                 r#""$39hvsi03hlne:example.com""# | ||||
|             ).expect("Failed to convert JSON to EventId"), | ||||
|             from_str::<EventId>(r#""$39hvsi03hlne:example.com""#) | ||||
|                 .expect("Failed to convert JSON to EventId"), | ||||
|             EventId::try_from("$39hvsi03hlne:example.com").expect("Failed to create EventId.") | ||||
|         ); | ||||
|     } | ||||
| @ -864,7 +873,9 @@ mod tests { | ||||
|     #[test] | ||||
|     fn invalid_event_id_port() { | ||||
|         assert_eq!( | ||||
|             EventId::try_from("$39hvsi03hlne:example.com:notaport").err().unwrap(), | ||||
|             EventId::try_from("$39hvsi03hlne:example.com:notaport") | ||||
|                 .err() | ||||
|                 .unwrap(), | ||||
|             Error::InvalidHost | ||||
|         ); | ||||
|     } | ||||
| @ -892,9 +903,8 @@ mod tests { | ||||
|     #[test] | ||||
|     fn deserialize_valid_room_alias_id() { | ||||
|         assert_eq!( | ||||
|             from_str::<RoomAliasId>( | ||||
|                 r##""#ruma:example.com""## | ||||
|             ).expect("Failed to convert JSON to RoomAliasId"), | ||||
|             from_str::<RoomAliasId>(r##""#ruma:example.com""##) | ||||
|                 .expect("Failed to convert JSON to RoomAliasId"), | ||||
|             RoomAliasId::try_from("#ruma:example.com").expect("Failed to create RoomAliasId.") | ||||
|         ); | ||||
|     } | ||||
| @ -932,7 +942,9 @@ mod tests { | ||||
|     #[test] | ||||
|     fn missing_room_alias_id_sigil() { | ||||
|         assert_eq!( | ||||
|             RoomAliasId::try_from("39hvsi03hlne:example.com").err().unwrap(), | ||||
|             RoomAliasId::try_from("39hvsi03hlne:example.com") | ||||
|                 .err() | ||||
|                 .unwrap(), | ||||
|             Error::MissingSigil | ||||
|         ); | ||||
|     } | ||||
| @ -956,7 +968,9 @@ mod tests { | ||||
|     #[test] | ||||
|     fn invalid_room_alias_id_port() { | ||||
|         assert_eq!( | ||||
|             RoomAliasId::try_from("#ruma:example.com:notaport").err().unwrap(), | ||||
|             RoomAliasId::try_from("#ruma:example.com:notaport") | ||||
|                 .err() | ||||
|                 .unwrap(), | ||||
|             Error::InvalidHost | ||||
|         ); | ||||
|     } | ||||
| @ -999,9 +1013,8 @@ mod tests { | ||||
|     #[test] | ||||
|     fn deserialize_valid_room_id() { | ||||
|         assert_eq!( | ||||
|             from_str::<RoomId>( | ||||
|                 r#""!29fhd83h92h0:example.com""# | ||||
|             ).expect("Failed to convert JSON to RoomId"), | ||||
|             from_str::<RoomId>(r#""!29fhd83h92h0:example.com""#) | ||||
|                 .expect("Failed to convert JSON to RoomId"), | ||||
|             RoomId::try_from("!29fhd83h92h0:example.com").expect("Failed to create RoomId.") | ||||
|         ); | ||||
|     } | ||||
| @ -1053,7 +1066,9 @@ mod tests { | ||||
|     #[test] | ||||
|     fn invalid_room_id_port() { | ||||
|         assert_eq!( | ||||
|             RoomId::try_from("!29fhd83h92h0:example.com:notaport").err().unwrap(), | ||||
|             RoomId::try_from("!29fhd83h92h0:example.com:notaport") | ||||
|                 .err() | ||||
|                 .unwrap(), | ||||
|             Error::InvalidHost | ||||
|         ); | ||||
|     } | ||||
| @ -1090,7 +1105,8 @@ mod tests { | ||||
|     fn serialize_valid_room_id_or_alias_id_with_a_room_alias_id() { | ||||
|         assert_eq!( | ||||
|             to_string( | ||||
|                 &RoomIdOrAliasId::try_from("#ruma:example.com").expect("Failed to create RoomAliasId.") | ||||
|                 &RoomIdOrAliasId::try_from("#ruma:example.com") | ||||
|                     .expect("Failed to create RoomAliasId.") | ||||
|             ).expect("Failed to convert RoomAliasId to JSON."), | ||||
|             r##""#ruma:example.com""## | ||||
|         ); | ||||
| @ -1100,7 +1116,8 @@ mod tests { | ||||
|     fn serialize_valid_room_id_or_alias_id_with_a_room_id() { | ||||
|         assert_eq!( | ||||
|             to_string( | ||||
|                 &RoomIdOrAliasId::try_from("!29fhd83h92h0:example.com").expect("Failed to create RoomId.") | ||||
|                 &RoomIdOrAliasId::try_from("!29fhd83h92h0:example.com") | ||||
|                     .expect("Failed to create RoomId.") | ||||
|             ).expect("Failed to convert RoomId to JSON."), | ||||
|             r#""!29fhd83h92h0:example.com""# | ||||
|         ); | ||||
| @ -1109,9 +1126,8 @@ mod tests { | ||||
|     #[test] | ||||
|     fn deserialize_valid_room_id_or_alias_id_with_a_room_alias_id() { | ||||
|         assert_eq!( | ||||
|             from_str::<RoomIdOrAliasId>( | ||||
|                 r##""#ruma:example.com""## | ||||
|             ).expect("Failed to convert JSON to RoomAliasId"), | ||||
|             from_str::<RoomIdOrAliasId>(r##""#ruma:example.com""##) | ||||
|                 .expect("Failed to convert JSON to RoomAliasId"), | ||||
|             RoomIdOrAliasId::try_from("#ruma:example.com").expect("Failed to create RoomAliasId.") | ||||
|         ); | ||||
|     } | ||||
| @ -1119,10 +1135,10 @@ mod tests { | ||||
|     #[test] | ||||
|     fn deserialize_valid_room_id_or_alias_id_with_a_room_id() { | ||||
|         assert_eq!( | ||||
|             from_str::<RoomIdOrAliasId>( | ||||
|                 r##""!29fhd83h92h0:example.com""## | ||||
|             ).expect("Failed to convert JSON to RoomId"), | ||||
|             RoomIdOrAliasId::try_from("!29fhd83h92h0:example.com").expect("Failed to create RoomAliasId.") | ||||
|             from_str::<RoomIdOrAliasId>(r##""!29fhd83h92h0:example.com""##) | ||||
|                 .expect("Failed to convert JSON to RoomId"), | ||||
|             RoomIdOrAliasId::try_from("!29fhd83h92h0:example.com") | ||||
|                 .expect("Failed to create RoomAliasId.") | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
| @ -1164,9 +1180,8 @@ mod tests { | ||||
|     #[test] | ||||
|     fn serialize_valid_user_id() { | ||||
|         assert_eq!( | ||||
|             to_string( | ||||
|                 &UserId::try_from("@carl:example.com").expect("Failed to create UserId.") | ||||
|             ).expect("Failed to convert UserId to JSON."), | ||||
|             to_string(&UserId::try_from("@carl:example.com").expect("Failed to create UserId.")) | ||||
|                 .expect("Failed to convert UserId to JSON."), | ||||
|             r#""@carl:example.com""# | ||||
|         ); | ||||
|     } | ||||
| @ -1174,9 +1189,7 @@ mod tests { | ||||
|     #[test] | ||||
|     fn deserialize_valid_user_id() { | ||||
|         assert_eq!( | ||||
|             from_str::<UserId>( | ||||
|                 r#""@carl:example.com""# | ||||
|             ).expect("Failed to convert JSON to UserId"), | ||||
|             from_str::<UserId>(r#""@carl:example.com""#).expect("Failed to convert JSON to UserId"), | ||||
|             UserId::try_from("@carl:example.com").expect("Failed to create UserId.") | ||||
|         ); | ||||
|     } | ||||
| @ -1236,7 +1249,9 @@ mod tests { | ||||
|     #[test] | ||||
|     fn invalid_user_id_port() { | ||||
|         assert_eq!( | ||||
|             UserId::try_from("@carl:example.com:notaport").err().unwrap(), | ||||
|             UserId::try_from("@carl:example.com:notaport") | ||||
|                 .err() | ||||
|                 .unwrap(), | ||||
|             Error::InvalidHost | ||||
|         ); | ||||
|     } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user