From ad7a18d50a3044af788abe3f515ec18e1f33cefc Mon Sep 17 00:00:00 2001 From: Devin R Date: Tue, 21 Apr 2020 09:47:36 -0400 Subject: [PATCH] state_store: remove associated Store type --- examples/command_bot.rs | 4 ++-- examples/login.rs | 3 +-- src/async_client.rs | 14 +++++++------- src/base_client.rs | 10 +++++----- src/event_emitter/mod.rs | 2 +- src/models/room.rs | 2 +- src/request_builder.rs | 4 ++-- src/state/mod.rs | 8 ++------ src/state/state_store.rs | 2 -- src/test_builder.rs | 26 +++++++++++++------------- tests/async_client_tests.rs | 6 +++--- 11 files changed, 37 insertions(+), 44 deletions(-) diff --git a/examples/command_bot.rs b/examples/command_bot.rs index 40aed458..a2d58fb0 100644 --- a/examples/command_bot.rs +++ b/examples/command_bot.rs @@ -15,11 +15,11 @@ struct CommandBot { /// /// The type parameter is for the `StateStore` trait specifying the `Store` /// type for state storage, here we don't care. - client: AsyncClient<()>, + client: AsyncClient, } impl CommandBot { - pub fn new(client: AsyncClient<()>) -> Self { + pub fn new(client: AsyncClient) -> Self { Self { client } } } diff --git a/examples/login.rs b/examples/login.rs index 9fbe4e16..150684c7 100644 --- a/examples/login.rs +++ b/examples/login.rs @@ -45,8 +45,7 @@ async fn login( .proxy("http://localhost:8080")? .disable_ssl_verification(); let homeserver_url = Url::parse(&homeserver_url)?; - let mut client = - AsyncClient::<()>::new_with_config(homeserver_url, None, client_config).unwrap(); + let mut client = AsyncClient::new_with_config(homeserver_url, None, client_config).unwrap(); client.add_event_emitter(Box::new(EventCallback)).await; diff --git a/src/async_client.rs b/src/async_client.rs index 7a0f1455..ffbc0f61 100644 --- a/src/async_client.rs +++ b/src/async_client.rs @@ -55,16 +55,16 @@ const DEFAULT_SYNC_TIMEOUT: Duration = Duration::from_secs(30); /// An async/await enabled Matrix client. /// /// All of the state is held in an `Arc` so the `AsyncClient` can be cloned freely. -pub struct AsyncClient { +pub struct AsyncClient { /// The URL of the homeserver to connect to. homeserver: Url, /// The underlying HTTP client. http_client: reqwest::Client, /// User session data. - pub(crate) base_client: Arc>>, + pub(crate) base_client: Arc>, } -impl std::fmt::Debug for AsyncClient { +impl std::fmt::Debug for AsyncClient { fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> StdResult<(), std::fmt::Error> { write!(fmt, "AsyncClient {{ homeserver: {} }}", self.homeserver) } @@ -197,7 +197,7 @@ use api::r0::room::create_room; use api::r0::session::login; use api::r0::sync::sync_events; -impl AsyncClient { +impl AsyncClient { /// Creates a new client for making HTTP requests to the given homeserver. /// /// # Arguments @@ -1119,7 +1119,7 @@ mod test { device_id: "DEVICEID".to_owned(), }; let homeserver = url::Url::parse(&mockito::server_url()).unwrap(); - let client = AsyncClient::<()>::new(homeserver, Some(session)).unwrap(); + let client = AsyncClient::new(homeserver, Some(session)).unwrap(); let rid = RoomId::try_from("!roomid:room.com").unwrap(); let uid = UserId::try_from("@example:localhost").unwrap(); @@ -1151,7 +1151,7 @@ mod test { }; let homeserver = url::Url::parse(&mockito::server_url()).unwrap(); - let client = AsyncClient::<()>::new(homeserver, Some(session)).unwrap(); + let client = AsyncClient::new(homeserver, Some(session)).unwrap(); let mut bld = EventBuilder::default() .add_room_event_from_file("./tests/data/events/member.json", RoomEvent::RoomMember) @@ -1181,7 +1181,7 @@ mod test { .with_body_from_file("tests/data/login_response_error.json") .create(); - let client = AsyncClient::<()>::new(homeserver, None).unwrap(); + let client = AsyncClient::new(homeserver, None).unwrap(); if let Err(err) = client.login("example", "wordpass", None, None).await { if let crate::Error::RumaResponse(ruma_api::error::FromHttpResponseError::Http( diff --git a/src/base_client.rs b/src/base_client.rs index 5fce01fd..0fd8e3bd 100644 --- a/src/base_client.rs +++ b/src/base_client.rs @@ -61,7 +61,7 @@ pub type Token = String; /// /// This Client is a state machine that receives responses and events and /// accordingly updates it's state. -pub struct Client { +pub struct Client { /// The current client session containing our user id, device id and access /// token. pub session: Option, @@ -77,13 +77,13 @@ pub struct Client { /// events. pub event_emitter: Option>, /// - pub state_store: Option>>, + pub state_store: Option>, #[cfg(feature = "encryption")] olm: Arc>>, } -impl fmt::Debug for Client { +impl fmt::Debug for Client { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("Client") .field("session", &self.session) @@ -96,7 +96,7 @@ impl fmt::Debug for Client { } } -impl Client { +impl Client { /// Create a new client. /// /// # Arguments @@ -815,7 +815,7 @@ mod test { .with_body_from_file("tests/data/sync.json") .create(); - let client = AsyncClient::<()>::new(homeserver, Some(session)).unwrap(); + let client = AsyncClient::new(homeserver, Some(session)).unwrap(); let sync_settings = SyncSettings::new().timeout(Duration::from_millis(3000)); diff --git a/src/event_emitter/mod.rs b/src/event_emitter/mod.rs index 4ff8b265..2d675521 100644 --- a/src/event_emitter/mod.rs +++ b/src/event_emitter/mod.rs @@ -238,7 +238,7 @@ mod test { let vec = Arc::new(Mutex::new(Vec::new())); let test_vec = Arc::clone(&vec); let emitter = Box::new(EvEmitterTest(vec)) as Box<(dyn EventEmitter)>; - let mut client = AsyncClient::<()>::new(homeserver, Some(session)).unwrap(); + let mut client = AsyncClient::new(homeserver, Some(session)).unwrap(); client.add_event_emitter(emitter).await; let sync_settings = SyncSettings::new().timeout(Duration::from_millis(3000)); diff --git a/src/models/room.rs b/src/models/room.rs index b5979e5a..0eed93fa 100644 --- a/src/models/room.rs +++ b/src/models/room.rs @@ -439,7 +439,7 @@ mod test { .with_body_from_file("tests/data/sync.json") .create(); - let client = AsyncClient::<()>::new(homeserver, Some(session)).unwrap(); + let client = AsyncClient::new(homeserver, Some(session)).unwrap(); let sync_settings = SyncSettings::new().timeout(Duration::from_millis(3000)); diff --git a/src/request_builder.rs b/src/request_builder.rs index 15ed1ee1..e891f492 100644 --- a/src/request_builder.rs +++ b/src/request_builder.rs @@ -341,7 +341,7 @@ mod test { .room_alias_name("room_alias") .topic("room topic") .visibility(Visibility::Private); - let cli = AsyncClient::<()>::new(homeserver, Some(session)).unwrap(); + let cli = AsyncClient::new(homeserver, Some(session)).unwrap(); assert!(cli.create_room(builder).await.is_ok()); } @@ -373,7 +373,7 @@ mod test { // TODO this makes ruma error `Err(IntoHttp(IntoHttpError(Query(Custom("unsupported value")))))`?? // .filter(RoomEventFilter::default()); - let cli = AsyncClient::<()>::new(homeserver, Some(session)).unwrap(); + let cli = AsyncClient::new(homeserver, Some(session)).unwrap(); assert!(cli.room_messages(builder).await.is_ok()); } } diff --git a/src/state/mod.rs b/src/state/mod.rs index 18b07e01..b9a5c2d0 100644 --- a/src/state/mod.rs +++ b/src/state/mod.rs @@ -42,14 +42,10 @@ pub struct ClientState { /// Abstraction around the data store to avoid unnecessary request on client initialization. pub trait StateStore: Send + Sync { - /// The type of store to create. The default `JsonStore` uses `ClientState` as the store - /// to serialize and deserialize state to JSON files. - type Store; - /// Set up connections or open files to load/save state. fn open(&self, path: &Path) -> Result<()>; /// Loads the state of `BaseClient` through `StateStore::Store` type. - fn load_client_state(&self, path: &Path) -> Result; + fn load_client_state(&self, path: &Path) -> Result; /// Load the state of a single `Room` by `RoomId`. fn load_room_state(&self, path: &Path, room_id: &RoomId) -> Result; /// Load the state of all `Room`s. @@ -57,7 +53,7 @@ pub trait StateStore: Send + Sync { /// This will be mapped over in the client in order to store `Room`s in an async safe way. fn load_all_rooms(&self, path: &Path) -> Result>; /// Save the current state of the `BaseClient` using the `StateStore::Store` type. - fn store_client_state(&self, path: &Path, _: Self::Store) -> Result<()>; + fn store_client_state(&self, path: &Path, _: ClientState) -> Result<()>; /// Save the state a single `Room`. fn store_room_state(&self, path: &Path, _: &Room) -> Result<()>; } diff --git a/src/state/state_store.rs b/src/state/state_store.rs index b5ef6617..6f57b0d9 100644 --- a/src/state/state_store.rs +++ b/src/state/state_store.rs @@ -11,8 +11,6 @@ use crate::{Error, Result, Room}; pub struct JsonStore; impl StateStore for JsonStore { - type Store = ClientState; - fn open(&self, path: &Path) -> Result<()> { if !path.exists() { std::fs::create_dir_all(path)?; diff --git a/src/test_builder.rs b/src/test_builder.rs index b6ef8cbd..4849cfb1 100644 --- a/src/test_builder.rs +++ b/src/test_builder.rs @@ -49,9 +49,9 @@ pub struct RoomTestRunner { state_events: Vec, } -pub struct ClientTestRunner { +pub struct ClientTestRunner { /// Used when testing the whole client - client: Option>, + client: Option, /// RoomId and UserId to use for the events. /// /// The RoomId must match the RoomId of the events to track. @@ -69,9 +69,9 @@ pub struct ClientTestRunner { } #[allow(dead_code)] -pub struct MockTestRunner { +pub struct MockTestRunner { /// Used when testing the whole client - client: Option>, + client: Option, /// The ephemeral room events that determine the state of a `Room`. ephemeral: Vec, /// The account data events that determine the state of a `Room`. @@ -169,11 +169,11 @@ impl EventBuilder { /// /// The `TestRunner` streams the events to the client and holds methods to make assertions /// about the state of the client. - pub fn build_mock_runner>( + pub fn build_mock_runner>( mut self, method: &str, path: P, - ) -> MockTestRunner { + ) -> MockTestRunner { let body = serde_json::json! { { "device_one_time_keys_count": {}, @@ -238,7 +238,7 @@ impl EventBuilder { /// /// The `TestRunner` streams the events to the `AsyncClient` and holds methods to make assertions /// about the state of the `AsyncClient`. - pub fn build_client_runner(self, room_id: RoomId, user_id: UserId) -> ClientTestRunner { + pub fn build_client_runner(self, room_id: RoomId, user_id: UserId) -> ClientTestRunner { ClientTestRunner { client: None, room_user_id: (room_id, user_id), @@ -313,8 +313,8 @@ impl RoomTestRunner { } } -impl ClientTestRunner { - pub fn set_client(&mut self, client: AsyncClient) -> &mut Self { +impl ClientTestRunner { + pub fn set_client(&mut self, client: AsyncClient) -> &mut Self { self.client = Some(client); self } @@ -355,14 +355,14 @@ impl ClientTestRunner { } } - pub async fn to_client(&mut self) -> &mut AsyncClient { + pub async fn to_client(&mut self) -> &mut AsyncClient { self.stream_client_events().await; self.client.as_mut().unwrap() } } -impl MockTestRunner { - pub fn set_client(&mut self, client: AsyncClient) -> &mut Self { +impl MockTestRunner { + pub fn set_client(&mut self, client: AsyncClient) -> &mut Self { self.client = Some(client); self } @@ -372,7 +372,7 @@ impl MockTestRunner { self } - pub async fn to_client(&mut self) -> Result<&mut AsyncClient, crate::Error> { + pub async fn to_client(&mut self) -> Result<&mut AsyncClient, crate::Error> { self.client .as_mut() .unwrap() diff --git a/tests/async_client_tests.rs b/tests/async_client_tests.rs index 9e27beda..3c9dacdc 100644 --- a/tests/async_client_tests.rs +++ b/tests/async_client_tests.rs @@ -17,7 +17,7 @@ async fn login() { .with_body_from_file("tests/data/login_response.json") .create(); - let client = AsyncClient::<()>::new(homeserver, None).unwrap(); + let client = AsyncClient::new(homeserver, None).unwrap(); client .login("example", "wordpass", None, None) @@ -46,7 +46,7 @@ async fn sync() { .with_body_from_file("tests/data/sync.json") .create(); - let client = AsyncClient::<()>::new(homeserver, Some(session)).unwrap(); + let client = AsyncClient::new(homeserver, Some(session)).unwrap(); let sync_settings = SyncSettings::new().timeout(Duration::from_millis(3000)); @@ -75,7 +75,7 @@ async fn room_names() { .with_body_from_file("tests/data/sync.json") .create(); - let client = AsyncClient::<()>::new(homeserver, Some(session)).unwrap(); + let client = AsyncClient::new(homeserver, Some(session)).unwrap(); let sync_settings = SyncSettings::new().timeout(Duration::from_millis(3000));