Skip to content

Commit e9dff24

Browse files
committed
Merge branch 'add_room_enum'
2 parents 9aad775 + 19cacb1 commit e9dff24

File tree

12 files changed

+99
-28
lines changed

12 files changed

+99
-28
lines changed

matrix_sdk/examples/autojoin.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use tokio::time::{sleep, Duration};
44
use matrix_sdk::{
55
self, async_trait,
66
events::{room::member::MemberEventContent, StrippedStateEvent},
7-
room, Client, ClientConfig, EventHandler, Room, SyncSettings,
7+
room, BaseRoom, Client, ClientConfig, EventHandler, SyncSettings,
88
};
99
use url::Url;
1010

@@ -22,7 +22,7 @@ impl AutoJoinBot {
2222
impl EventHandler for AutoJoinBot {
2323
async fn on_stripped_state_member(
2424
&self,
25-
room: Room,
25+
room: BaseRoom,
2626
room_member: &StrippedStateEvent<MemberEventContent>,
2727
_: Option<MemberEventContent>,
2828
) {

matrix_sdk/examples/command_bot.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use matrix_sdk::{
77
AnyMessageEventContent, SyncMessageEvent,
88
},
99
room::Joined,
10-
Client, ClientConfig, EventHandler, Room, SyncSettings,
10+
BaseRoom, Client, ClientConfig, EventHandler, SyncSettings,
1111
};
1212
use url::Url;
1313

@@ -25,7 +25,7 @@ impl CommandBot {
2525

2626
#[async_trait]
2727
impl EventHandler for CommandBot {
28-
async fn on_room_message(&self, room: Room, event: &SyncMessageEvent<MessageEventContent>) {
28+
async fn on_room_message(&self, room: BaseRoom, event: &SyncMessageEvent<MessageEventContent>) {
2929
if let Some(room) = Joined::new(self.client.clone(), room) {
3030
let msg_body = if let SyncMessageEvent {
3131
content:

matrix_sdk/examples/image_bot.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use matrix_sdk::{
1515
SyncMessageEvent,
1616
},
1717
room::Joined,
18-
Client, EventHandler, Room, SyncSettings,
18+
BaseRoom, Client, EventHandler, SyncSettings,
1919
};
2020
use url::Url;
2121

@@ -33,7 +33,7 @@ impl ImageBot {
3333

3434
#[async_trait]
3535
impl EventHandler for ImageBot {
36-
async fn on_room_message(&self, room: Room, event: &SyncMessageEvent<MessageEventContent>) {
36+
async fn on_room_message(&self, room: BaseRoom, event: &SyncMessageEvent<MessageEventContent>) {
3737
if let Some(room) = Joined::new(self.client.clone(), room) {
3838
let msg_body = if let SyncMessageEvent {
3939
content:

matrix_sdk/examples/login.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ use matrix_sdk::{
77
room::message::{MessageEventContent, MessageType, TextMessageEventContent},
88
SyncMessageEvent,
99
},
10-
Client, EventHandler, Room, RoomType, SyncSettings,
10+
BaseRoom, Client, EventHandler, RoomType, SyncSettings,
1111
};
1212

1313
struct EventCallback;
1414

1515
#[async_trait]
1616
impl EventHandler for EventCallback {
17-
async fn on_room_message(&self, room: Room, event: &SyncMessageEvent<MessageEventContent>) {
17+
async fn on_room_message(&self, room: BaseRoom, event: &SyncMessageEvent<MessageEventContent>) {
1818
if room.room_type() == RoomType::Joined {
1919
if let SyncMessageEvent {
2020
content:

matrix_sdk/src/client.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -547,11 +547,11 @@ impl Client {
547547
/// Get all the rooms the client knows about.
548548
///
549549
/// This will return the list of joined, invited, and left rooms.
550-
pub fn rooms(&self) -> Vec<room::Common> {
550+
pub fn rooms(&self) -> Vec<room::Room> {
551551
self.store()
552552
.get_rooms()
553553
.into_iter()
554-
.map(|room| room::Common::new(self.clone(), room))
554+
.map(|room| room::Common::new(self.clone(), room).into())
555555
.collect()
556556
}
557557

@@ -587,10 +587,10 @@ impl Client {
587587
/// # Arguments
588588
///
589589
/// `room_id` - The unique id of the room that should be fetched.
590-
pub fn get_room(&self, room_id: &RoomId) -> Option<room::Common> {
590+
pub fn get_room(&self, room_id: &RoomId) -> Option<room::Room> {
591591
self.store()
592592
.get_room(room_id)
593-
.map(|room| room::Common::new(self.clone(), room))
593+
.map(|room| room::Common::new(self.clone(), room).into())
594594
}
595595

596596
/// Get a joined room with the given room id.

matrix_sdk/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ compile_error!("only one of 'native-tls' or 'rustls-tls' features can be enabled
6868
#[cfg_attr(feature = "docs", doc(cfg(encryption)))]
6969
pub use matrix_sdk_base::crypto::{EncryptionInfo, LocalTrust};
7070
pub use matrix_sdk_base::{
71-
CustomEvent, Error as BaseError, EventHandler, Room, RoomInfo, RoomMember, RoomType, Session,
72-
StateChanges, StoreError,
71+
CustomEvent, Error as BaseError, EventHandler, Room as BaseRoom, RoomInfo, RoomMember,
72+
RoomType, Session, StateChanges, StoreError,
7373
};
7474

7575
pub use matrix_sdk_common::*;

matrix_sdk/src/room/common.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ use matrix_sdk_common::locks::Mutex;
66

77
use std::{ops::Deref, sync::Arc};
88

9-
use crate::{Client, Result, Room, RoomMember};
9+
use crate::{BaseRoom, Client, Result, RoomMember};
1010

1111
/// A struct containing methodes that are common for Joined, Invited and Left Rooms
1212
#[derive(Debug, Clone)]
1313
pub struct Common {
14-
inner: Room,
14+
inner: BaseRoom,
1515
pub(crate) client: Client,
1616
}
1717

1818
impl Deref for Common {
19-
type Target = Room;
19+
type Target = BaseRoom;
2020

2121
fn deref(&self) -> &Self::Target {
2222
&self.inner
@@ -30,7 +30,7 @@ impl Common {
3030
/// * `client` - The client used to make requests.
3131
///
3232
/// * `room` - The underlaying room.
33-
pub fn new(client: Client, room: Room) -> Self {
33+
pub fn new(client: Client, room: BaseRoom) -> Self {
3434
// TODO: Make this private
3535
Self {
3636
inner: room,

matrix_sdk/src/room/invited.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::{room::Common, Client, Result, Room, RoomType};
1+
use crate::{room::Common, BaseRoom, Client, Result, RoomType};
22
use std::ops::Deref;
33

44
/// A room in the invited state.
@@ -7,7 +7,7 @@ use std::ops::Deref;
77
/// Operations may fail once the underlaying `Room` changes `RoomType`.
88
#[derive(Debug, Clone)]
99
pub struct Invited {
10-
inner: Common,
10+
pub(crate) inner: Common,
1111
}
1212

1313
impl Invited {
@@ -17,7 +17,7 @@ impl Invited {
1717
/// * `client` - The client used to make requests.
1818
///
1919
/// * `room` - The underlaying room.
20-
pub fn new(client: Client, room: Room) -> Option<Self> {
20+
pub fn new(client: Client, room: BaseRoom) -> Option<Self> {
2121
// TODO: Make this private
2222
if room.room_type() == RoomType::Invited {
2323
Some(Self {

matrix_sdk/src/room/joined.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::{room::Common, Client, Result, Room, RoomType};
1+
use crate::{room::Common, BaseRoom, Client, Result, RoomType};
22
use std::{io::Read, ops::Deref, sync::Arc};
33

44
use matrix_sdk_common::{
@@ -51,7 +51,7 @@ const TYPING_NOTICE_RESEND_TIMEOUT: Duration = Duration::from_secs(3);
5151
/// Operations may fail once the underlaying `Room` changes `RoomType`.
5252
#[derive(Debug, Clone)]
5353
pub struct Joined {
54-
inner: Common,
54+
pub(crate) inner: Common,
5555
}
5656

5757
impl Deref for Joined {
@@ -63,13 +63,13 @@ impl Deref for Joined {
6363
}
6464

6565
impl Joined {
66-
/// Create a new `room::Joined` if the underlaying `Room` has type `RoomType::Joined`.
66+
/// Create a new `room::Joined` if the underlaying `BaseRoom` has type `RoomType::Joined`.
6767
///
6868
/// # Arguments
6969
/// * `client` - The client used to make requests.
7070
///
7171
/// * `room` - The underlaying room.
72-
pub fn new(client: Client, room: Room) -> Option<Self> {
72+
pub fn new(client: Client, room: BaseRoom) -> Option<Self> {
7373
// TODO: Make this private
7474
if room.room_type() == RoomType::Joined {
7575
Some(Self {

matrix_sdk/src/room/left.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::{room::Common, Client, Result, Room, RoomType};
1+
use crate::{room::Common, BaseRoom, Client, Result, RoomType};
22
use std::ops::Deref;
33

44
use matrix_sdk_common::api::r0::membership::forget_room;
@@ -9,7 +9,7 @@ use matrix_sdk_common::api::r0::membership::forget_room;
99
/// Operations may fail once the underlaying `Room` changes `RoomType`.
1010
#[derive(Debug, Clone)]
1111
pub struct Left {
12-
inner: Common,
12+
pub(crate) inner: Common,
1313
}
1414

1515
impl Left {
@@ -19,7 +19,7 @@ impl Left {
1919
/// * `client` - The client used to make requests.
2020
///
2121
/// * `room` - The underlaying room.
22-
pub fn new(client: Client, room: Room) -> Option<Self> {
22+
pub fn new(client: Client, room: BaseRoom) -> Option<Self> {
2323
// TODO: Make this private
2424
if room.room_type() == RoomType::Left {
2525
Some(Self {

matrix_sdk/src/room/mod.rs

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
use std::ops::Deref;
2+
3+
use crate::RoomType;
4+
15
mod common;
26
mod invited;
37
mod joined;
@@ -7,3 +11,69 @@ pub use self::common::Common;
711
pub use self::invited::Invited;
812
pub use self::joined::Joined;
913
pub use self::left::Left;
14+
15+
/// An enum that abstracts over the different states a room can be in.
16+
#[derive(Debug, Clone)]
17+
pub enum Room {
18+
/// The room in the `join` state.
19+
Joined(Joined),
20+
/// The room in the `left` state.
21+
Left(Left),
22+
/// The room in the `invited` state.
23+
Invited(Invited),
24+
}
25+
26+
impl Deref for Room {
27+
type Target = Common;
28+
29+
fn deref(&self) -> &Self::Target {
30+
match self {
31+
Self::Joined(room) => &*room,
32+
Self::Left(room) => &*room,
33+
Self::Invited(room) => &*room,
34+
}
35+
}
36+
}
37+
38+
impl From<Common> for Room {
39+
fn from(room: Common) -> Self {
40+
match room.room_type() {
41+
RoomType::Joined => Self::Joined(Joined { inner: room }),
42+
RoomType::Left => Self::Left(Left { inner: room }),
43+
RoomType::Invited => Self::Invited(Invited { inner: room }),
44+
}
45+
}
46+
}
47+
48+
impl From<Joined> for Room {
49+
fn from(room: Joined) -> Self {
50+
let room = (*room).clone();
51+
match room.room_type() {
52+
RoomType::Joined => Self::Joined(Joined { inner: room }),
53+
RoomType::Left => Self::Left(Left { inner: room }),
54+
RoomType::Invited => Self::Invited(Invited { inner: room }),
55+
}
56+
}
57+
}
58+
59+
impl From<Left> for Room {
60+
fn from(room: Left) -> Self {
61+
let room = (*room).clone();
62+
match room.room_type() {
63+
RoomType::Joined => Self::Joined(Joined { inner: room }),
64+
RoomType::Left => Self::Left(Left { inner: room }),
65+
RoomType::Invited => Self::Invited(Invited { inner: room }),
66+
}
67+
}
68+
}
69+
70+
impl From<Invited> for Room {
71+
fn from(room: Invited) -> Self {
72+
let room = (*room).clone();
73+
match room.room_type() {
74+
RoomType::Joined => Self::Joined(Joined { inner: room }),
75+
RoomType::Left => Self::Left(Left { inner: room }),
76+
RoomType::Invited => Self::Invited(Invited { inner: room }),
77+
}
78+
}
79+
}

matrix_sdk/src/room/room.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+

0 commit comments

Comments
 (0)