Merge pull request #23 from ruma/rust-2018

Update to Rust 2018
This commit is contained in:
Jimmy Cuadra 2019-01-16 08:02:50 -08:00 committed by GitHub
commit 9d5449b219
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
33 changed files with 134 additions and 112 deletions

1
.rustfmt.toml Normal file
View File

@ -0,0 +1 @@
merge_imports = true

View File

@ -9,6 +9,7 @@ name = "ruma-events"
readme = "README.md"
repository = "https://github.com/ruma/ruma-events"
version = "0.11.0"
edition = "2018"
[dependencies]
ruma-identifiers = "0.11.0"

View File

@ -1,5 +1,7 @@
//! Types for the *m.call.answer* event.
use serde_derive::{Deserialize, Serialize};
use super::SessionDescription;
room_event! {

View File

@ -1,5 +1,7 @@
//! Types for the *m.call.candidates* event.
use serde_derive::{Deserialize, Serialize};
room_event! {
/// This event is sent by callers after sending an invite and by the callee after answering.
/// Its purpose is to give the other party additional ICE candidates to try using to

View File

@ -1,5 +1,7 @@
//! Types for the *m.call.hangup* event.
use serde_derive::{Deserialize, Serialize};
room_event! {
/// Sent by either party to signal their termination of the call. This can be sent either once
/// the call has has been established or before to abort the call.

View File

@ -1,5 +1,7 @@
//! Types for the *m.call.invite* event.
use serde_derive::{Deserialize, Serialize};
use super::SessionDescription;
room_event! {

View File

@ -2,6 +2,8 @@
//!
//! This module also contains types shared by events in its child namespaces.
use serde_derive::{Deserialize, Serialize};
pub mod answer;
pub mod candidates;
pub mod hangup;

View File

@ -1,34 +1,27 @@
//! Enums for heterogeneous collections of events, inclusive for every event type that implements
//! the trait of the same name.
use call::answer::AnswerEvent;
use call::candidates::CandidatesEvent;
use call::hangup::HangupEvent;
use call::invite::InviteEvent;
use direct::DirectEvent;
use presence::PresenceEvent;
use receipt::ReceiptEvent;
use room::aliases::AliasesEvent;
use room::avatar::AvatarEvent;
use room::canonical_alias::CanonicalAliasEvent;
use room::create::CreateEvent;
use room::guest_access::GuestAccessEvent;
use room::history_visibility::HistoryVisibilityEvent;
use room::join_rules::JoinRulesEvent;
use room::member::MemberEvent;
use room::message::MessageEvent;
use room::name::NameEvent;
use room::pinned_events::PinnedEventsEvent;
use room::power_levels::PowerLevelsEvent;
use room::redaction::RedactionEvent;
use room::third_party_invite::ThirdPartyInviteEvent;
use room::topic::TopicEvent;
use tag::TagEvent;
use typing::TypingEvent;
use {CustomEvent, CustomRoomEvent, CustomStateEvent, EventType};
use crate::{
call::{
answer::AnswerEvent, candidates::CandidatesEvent, hangup::HangupEvent, invite::InviteEvent,
},
direct::DirectEvent,
presence::PresenceEvent,
receipt::ReceiptEvent,
room::{
aliases::AliasesEvent, avatar::AvatarEvent, canonical_alias::CanonicalAliasEvent,
create::CreateEvent, guest_access::GuestAccessEvent,
history_visibility::HistoryVisibilityEvent, join_rules::JoinRulesEvent,
member::MemberEvent, message::MessageEvent, name::NameEvent,
pinned_events::PinnedEventsEvent, power_levels::PowerLevelsEvent,
redaction::RedactionEvent, third_party_invite::ThirdPartyInviteEvent, topic::TopicEvent,
},
tag::TagEvent,
typing::TypingEvent,
CustomEvent, CustomRoomEvent, CustomStateEvent, EventType,
};
use serde::de::Error;
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use serde::{de::Error, Deserialize, Deserializer, Serialize, Serializer};
use serde_json::{from_value, Value};
/// A basic event, room event, or state event.
@ -425,7 +418,8 @@ impl<'de> Deserialize<'de> for Event {
};
Ok(Event::CustomState(event))
} else if value.get("event_id").is_some() && value.get("room_id").is_some()
} else if value.get("event_id").is_some()
&& value.get("room_id").is_some()
&& value.get("sender").is_some()
{
let event = match from_value::<CustomRoomEvent>(value) {

View File

@ -1,24 +1,22 @@
//! Enums for heterogeneous collections of events, exclusive to event types that implement "at
//! most" the trait of the same name.
use call::answer::AnswerEvent;
use call::candidates::CandidatesEvent;
use call::hangup::HangupEvent;
use call::invite::InviteEvent;
use direct::DirectEvent;
use presence::PresenceEvent;
use receipt::ReceiptEvent;
use room::message::MessageEvent;
use room::redaction::RedactionEvent;
use tag::TagEvent;
use typing::TypingEvent;
use {CustomEvent, CustomRoomEvent, EventType};
use serde::de::Error;
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use serde::{de::Error, Deserialize, Deserializer, Serialize, Serializer};
use serde_json::{from_value, Value};
pub use super::all::StateEvent;
use crate::{
call::{
answer::AnswerEvent, candidates::CandidatesEvent, hangup::HangupEvent, invite::InviteEvent,
},
direct::DirectEvent,
presence::PresenceEvent,
receipt::ReceiptEvent,
room::{message::MessageEvent, redaction::RedactionEvent},
tag::TagEvent,
typing::TypingEvent,
CustomEvent, CustomRoomEvent, EventType,
};
/// A basic event.
#[derive(Clone, Debug)]

View File

@ -3,6 +3,7 @@
use std::collections::HashMap;
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
event! {
/// Informs the client about the rooms that are considered direct by a user.
@ -22,9 +23,11 @@ mod tests {
use ruma_identifiers::{RoomId, UserId};
use serde_json::{from_str, to_string};
use super::super::EventType;
use collections;
use direct::{DirectEvent, DirectEventContent};
use crate::{
collections,
direct::{DirectEvent, DirectEventContent},
EventType,
};
#[test]
fn serialization() {

View File

@ -100,18 +100,14 @@
#![deny(missing_docs)]
#![deny(warnings)]
extern crate ruma_identifiers;
extern crate ruma_signatures;
extern crate serde;
#[macro_use]
extern crate serde_derive;
extern crate serde_json;
use std::fmt::{Debug, Display, Error as FmtError, Formatter, Result as FmtResult};
use ruma_identifiers::{EventId, RoomId, UserId};
use serde::de::{Error as SerdeError, Visitor};
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use serde::{
de::{Error as SerdeError, Visitor},
Deserialize, Deserializer, Serialize, Serializer,
};
use serde_derive::{Deserialize, Serialize};
use serde_json::Value;
#[macro_use]
@ -251,7 +247,7 @@ state_event! {
}
impl Display for EventType {
fn fmt(&self, f: &mut Formatter) -> Result<(), FmtError> {
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), FmtError> {
let event_type_str = match *self {
EventType::CallAnswer => "m.call.answer",
EventType::CallCandidates => "m.call.candidates",
@ -335,7 +331,7 @@ impl<'de> Deserialize<'de> for EventType {
impl<'de> Visitor<'de> for EventTypeVisitor {
type Value = EventType;
fn expecting(&self, formatter: &mut Formatter) -> FmtResult {
fn expecting(&self, formatter: &mut Formatter<'_>) -> FmtResult {
write!(formatter, "a Matrix event type as a string")
}

View File

@ -1,7 +1,7 @@
macro_rules! impl_enum {
($name:ident { $($variant:ident => $s:expr,)+ }) => {
impl ::std::fmt::Display for $name {
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> Result<(), ::std::fmt::Error> {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> Result<(), ::std::fmt::Error> {
let variant = match *self {
$($name::$variant => $s,)*
};
@ -39,7 +39,7 @@ macro_rules! event {
pub content: $content_type,
/// The type of the event.
#[serde(rename="type")]
#[serde(rename = "type")]
pub event_type: $crate::EventType,
$(
@ -87,7 +87,7 @@ macro_rules! room_event {
pub event_id: ::ruma_identifiers::EventId,
/// The type of the event.
#[serde(rename="type")]
#[serde(rename = "type")]
pub event_type: $crate::EventType,
/// Timestamp in milliseconds on originating homeserver when this event was sent.
@ -98,7 +98,7 @@ macro_rules! room_event {
pub room_id: Option<::ruma_identifiers::RoomId>,
/// Additional key-value pairs not signed by the homeserver.
#[serde(skip_serializing_if="Option::is_none")]
#[serde(skip_serializing_if = "Option::is_none")]
pub unsigned: Option<::serde_json::Value>,
/// The unique identifier for the user who sent this event.
@ -162,14 +162,14 @@ macro_rules! state_event {
pub event_id: ::ruma_identifiers::EventId,
/// The type of the event.
#[serde(rename="type")]
#[serde(rename = "type")]
pub event_type: $crate::EventType,
/// Timestamp in milliseconds on originating homeserver when this event was sent.
pub origin_server_ts: u64,
/// The previous content for this state key, if any.
#[serde(skip_serializing_if="Option::is_none")]
#[serde(skip_serializing_if = "Option::is_none")]
pub prev_content: Option<$content_type>,
/// The unique identifier for the room associated with this event.
@ -180,7 +180,7 @@ macro_rules! state_event {
pub state_key: String,
/// Additional key-value pairs not signed by the homeserver.
#[serde(skip_serializing_if="Option::is_none")]
#[serde(skip_serializing_if = "Option::is_none")]
pub unsigned: Option<::serde_json::Value>,
/// The unique identifier for the user associated with this event.

View File

@ -1,5 +1,7 @@
//! Types for the *m.presence* event.
use serde_derive::{Deserialize, Serialize};
use ruma_identifiers::UserId;
event! {
@ -59,12 +61,13 @@ impl_enum! {
#[cfg(test)]
mod tests {
use serde_json::{from_str, to_string};
use std::convert::TryFrom;
use ruma_identifiers::UserId;
use serde_json::{from_str, to_string};
use super::{PresenceEvent, PresenceEventContent, PresenceState};
use super::super::{EventType};
use crate::EventType;
/// Test serialization and deserialization of example m.presence event from the spec
/// https://github.com/turt2live/matrix-doc/blob/master/event-schemas/examples/m.presence
@ -84,18 +87,9 @@ mod tests {
let serialized_event =
r#"{"content":{"avatar_url":"mxc://localhost:wefuiwegh8742w","currently_active":false,"last_active_ago":2478593,"presence":"online"},"type":"m.presence","sender":"@example:localhost"}"#;
assert_eq!(
to_string(&event).unwrap(),
serialized_event
);
assert_eq!(to_string(&event).unwrap(), serialized_event);
let deserialized_event = from_str::<PresenceEvent>(serialized_event).unwrap();
assert_eq!(
deserialized_event.content,
event.content
);
assert_eq!(
deserialized_event.sender,
event.sender
);
assert_eq!(deserialized_event.content, event.content);
assert_eq!(deserialized_event.sender, event.sender);
}
}

View File

@ -3,6 +3,7 @@
use std::collections::HashMap;
use ruma_identifiers::{EventId, RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
event! {
/// Informs the client of new receipts.

View File

@ -1,6 +1,7 @@
//! Types for the *m.room.aliases* event.
use ruma_identifiers::RoomAliasId;
use serde_derive::{Deserialize, Serialize};
state_event! {
/// Informs the room about what room aliases it has been given.

View File

@ -1,5 +1,7 @@
//! Types for the *m.room.avatar* event.
use serde_derive::{Deserialize, Serialize};
use super::ImageInfo;
state_event! {

View File

@ -1,6 +1,7 @@
//! Types for the *m.room.canonical_alias* event.
use ruma_identifiers::RoomAliasId;
use serde_derive::{Deserialize, Serialize};
state_event! {
/// Informs the room as to which alias is the canonical one.

View File

@ -1,6 +1,7 @@
//! Types for the *m.room.create* event.
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
state_event! {
/// This is the first event in a room and cannot be changed. It acts as the root of all other

View File

@ -1,5 +1,7 @@
//! Types for the *m.room.guest_access* event.
use serde_derive::{Deserialize, Serialize};
state_event! {
/// Controls whether guest users are allowed to join rooms.
///

View File

@ -1,5 +1,7 @@
//! Types for the *m.room.history_visibility* event.
use serde_derive::{Deserialize, Serialize};
state_event! {
/// This event controls whether a member of a room can see the events that happened in a room
/// from before they joined.

View File

@ -1,5 +1,7 @@
//! Types for the *m.room.join_rules* event.
use serde_derive::{Deserialize, Serialize};
state_event! {
/// Describes how users are allowed to join the room.
pub struct JoinRulesEvent(JoinRulesEventContent) {}

View File

@ -2,8 +2,9 @@
use ruma_identifiers::UserId;
use ruma_signatures::Signatures;
use serde_derive::{Deserialize, Serialize};
use stripped::StrippedState;
use crate::stripped::StrippedState;
state_event! {
/// The current membership state of a user in the room.
@ -22,7 +23,7 @@ state_event! {
/// on a few select state events such as the room name.
pub struct MemberEvent(MemberEventContent) {
/// A subset of the state of the room at the time of the invite.
#[serde(skip_serializing_if="Option::is_none")]
#[serde(skip_serializing_if = "Option::is_none")]
pub invite_room_state: Option<Vec<StrippedState>>
}
}

View File

@ -1,7 +1,7 @@
//! Types for the *m.room.message* event.
use serde::de::Error;
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use serde::{de::Error, Deserialize, Deserializer, Serialize, Serializer};
use serde_derive::{Deserialize, Serialize};
use serde_json::{from_value, Value};
use super::{ImageInfo, ThumbnailInfo};
@ -396,17 +396,17 @@ mod tests {
assert_eq!(
from_str::<MessageEventContent>(
r#"{"body":"test","msgtype":"m.audio","url":"http://example.com/audio.mp3"}"#
).unwrap(),
)
.unwrap(),
message_event_content
);
}
#[test]
fn deserialization_failure() {
assert!(
from_str::<MessageEventContent>(
r#"{"body":"test","msgtype":"m.location","url":"http://example.com/audio.mp3"}"#
).is_err()
);
assert!(from_str::<MessageEventContent>(
r#"{"body":"test","msgtype":"m.location","url":"http://example.com/audio.mp3"}"#
)
.is_err());
}
}

View File

@ -2,6 +2,8 @@
//!
//! This module also contains types shared by events in its child namespaces.
use serde_derive::{Deserialize, Serialize};
pub mod aliases;
pub mod avatar;
pub mod canonical_alias;

View File

@ -1,5 +1,7 @@
//! Types for the *m.room.name* event.
use serde_derive::{Deserialize, Serialize};
state_event! {
/// A human-friendly room name designed to be displayed to the end-user.
pub struct NameEvent(NameEventContent) {}

View File

@ -1,6 +1,7 @@
//! Types for the *m.room.pinned_events* event.
use ruma_identifiers::EventId;
use serde_derive::{Deserialize, Serialize};
state_event! {
/// Used to "pin" particular events in a room for other participants to review later.
@ -19,11 +20,10 @@ mod tests {
use ruma_identifiers::{EventId, RoomId, UserId};
use serde_json::{from_str, to_string};
use room::pinned_events::{PinnedEventsContent, PinnedEventsEvent};
use Event;
use EventType;
use RoomEvent;
use StateEvent;
use crate::{
room::pinned_events::{PinnedEventsContent, PinnedEventsEvent},
Event, EventType, RoomEvent, StateEvent,
};
#[test]
fn serialization_deserialization() {

View File

@ -3,8 +3,9 @@
use std::collections::HashMap;
use ruma_identifiers::UserId;
use serde_derive::{Deserialize, Serialize};
use EventType;
use crate::EventType;
state_event! {
/// Defines the power levels (privileges) of users in the room.

View File

@ -1,6 +1,7 @@
//! Types for the *m.room.redaction* event.
use ruma_identifiers::EventId;
use serde_derive::{Deserialize, Serialize};
room_event! {
/// A redaction of an event.

View File

@ -1,5 +1,7 @@
//! Types for the *m.room.third_party_invite* event.
use serde_derive::{Deserialize, Serialize};
state_event! {
/// An invitation to a room issued to a third party identifier, rather than a matrix user ID.
///

View File

@ -1,5 +1,7 @@
//! Types for the *m.room.topic* event.
use serde_derive::{Deserialize, Serialize};
state_event! {
/// A topic is a short message detailing what is currently being discussed in the room.
pub struct TopicEvent(TopicEventContent) {}

View File

@ -6,23 +6,21 @@
//! the other fields are otherwise inapplicable.
use ruma_identifiers::UserId;
use serde::de::Error;
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use serde::{de::Error, Deserialize, Deserializer, Serialize, Serializer};
use serde_derive::{Deserialize, Serialize};
use serde_json::{from_value, Value};
use room::aliases::AliasesEventContent;
use room::avatar::AvatarEventContent;
use room::canonical_alias::CanonicalAliasEventContent;
use room::create::CreateEventContent;
use room::guest_access::GuestAccessEventContent;
use room::history_visibility::HistoryVisibilityEventContent;
use room::join_rules::JoinRulesEventContent;
use room::member::MemberEventContent;
use room::name::NameEventContent;
use room::power_levels::PowerLevelsEventContent;
use room::third_party_invite::ThirdPartyInviteEventContent;
use room::topic::TopicEventContent;
use EventType;
use crate::{
room::{
aliases::AliasesEventContent, avatar::AvatarEventContent,
canonical_alias::CanonicalAliasEventContent, create::CreateEventContent,
guest_access::GuestAccessEventContent, history_visibility::HistoryVisibilityEventContent,
join_rules::JoinRulesEventContent, member::MemberEventContent, name::NameEventContent,
power_levels::PowerLevelsEventContent, third_party_invite::ThirdPartyInviteEventContent,
topic::TopicEventContent,
},
EventType,
};
/// A stripped-down version of a state event that is included along with some other events.
#[derive(Clone, Debug)]
@ -265,9 +263,10 @@ mod tests {
use serde_json::{from_str, to_string};
use super::{StrippedRoomTopic, StrippedState};
use room::join_rules::JoinRule;
use room::topic::TopicEventContent;
use EventType;
use crate::{
room::{join_rules::JoinRule, topic::TopicEventContent},
EventType,
};
#[test]
fn serialize_stripped_state_event() {

View File

@ -2,6 +2,8 @@
use std::collections::HashMap;
use serde_derive::{Deserialize, Serialize};
event! {
/// Informs the client of tags on a room.
pub struct TagEvent(TagEventContent) {}

View File

@ -1,6 +1,7 @@
//! Types for the *m.typing* event.
use ruma_identifiers::{RoomId, UserId};
use serde_derive::{Deserialize, Serialize};
event! {
/// Informs the client of the list of users currently typing.