From 9261668364d53008d1491737c3f253faa3972fa0 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 24 May 2024 10:50:24 -0400 Subject: [PATCH 01/11] Add User & Plugin request builders and move all requests into them --- wp_api/src/lib.rs | 208 ++++++++++++++++++++++++---------------------- 1 file changed, 109 insertions(+), 99 deletions(-) diff --git a/wp_api/src/lib.rs b/wp_api/src/lib.rs index cd6dc5196..992d551cf 100644 --- a/wp_api/src/lib.rs +++ b/wp_api/src/lib.rs @@ -37,30 +37,112 @@ fn wp_authentication_from_username_and_password( WPAuthentication::from_username_and_password(username, password) } -#[uniffi::export] -impl WPApiHelper { - #[uniffi::constructor] - pub fn new(site_url: String, authentication: WPAuthentication) -> Self { - let url = Url::parse(site_url.as_str()).unwrap(); - // TODO: Handle the url parse error - let api_endpoint = ApiEndpoint::new_from_str(site_url.as_str()).unwrap(); +struct RequestBuilder {} - Self { - api_endpoint, - authentication, +struct PluginRequestBuilder {} + +impl PluginRequestBuilder { + pub fn list_plugins_request( + &self, + context: WPContext, + params: &Option, // UniFFI doesn't support Option<&T> + ) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::GET, + url: self + .api_endpoint + .plugins + .list(context, params.as_ref()) + .into(), + header_map: self.header_map(), + body: None, } } - // TODO: Remove this because we want to build all requests within the crate - pub fn raw_request(&self, url: String) -> WPNetworkRequest { + pub fn filter_list_plugins_request( + &self, + context: WPContext, + params: &Option, // UniFFI doesn't support Option<&T> + fields: &[SparsePluginField], + ) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, - url: ApiEndpointUrl::new(Url::parse(url.as_str()).unwrap()).into(), + url: self + .api_endpoint + .plugins + .filter_list(context, params.as_ref(), fields) + .into(), + header_map: self.header_map(), + body: None, + } + } + + pub fn create_plugin_request(&self, params: &PluginCreateParams) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::POST, + url: self.api_endpoint.plugins.create().into(), + header_map: self.header_map_for_post_request(), + body: serde_json::to_vec(¶ms).ok(), + } + } + + pub fn retrieve_plugin_request( + &self, + context: WPContext, + plugin: &PluginSlug, + ) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::GET, + url: self.api_endpoint.plugins.retrieve(context, plugin).into(), header_map: self.header_map(), body: None, } } + pub fn filter_retrieve_plugin_request( + &self, + context: WPContext, + plugin: &PluginSlug, + fields: &[SparsePluginField], + ) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::GET, + url: self + .api_endpoint + .plugins + .filter_retrieve(context, plugin, fields) + .into(), + header_map: self.header_map(), + body: None, + } + } + + pub fn update_plugin_request( + &self, + plugin: &PluginSlug, + params: &PluginUpdateParams, + ) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::POST, + url: self.api_endpoint.plugins.update(plugin).into(), + header_map: self.header_map_for_post_request(), + body: serde_json::to_vec(¶ms).ok(), + } + } + + pub fn delete_plugin_request(&self, plugin: &PluginSlug) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::DELETE, + url: self.api_endpoint.plugins.delete(plugin).into(), + header_map: self.header_map(), + body: None, + } + } +} + +struct UserRequestBuilder {} + +impl UserRequestBuilder { pub fn list_users_request( &self, context: WPContext, @@ -201,99 +283,27 @@ impl WPApiHelper { body: None, } } +} - pub fn list_plugins_request( - &self, - context: WPContext, - params: &Option, // UniFFI doesn't support Option<&T> - ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self - .api_endpoint - .plugins - .list(context, params.as_ref()) - .into(), - header_map: self.header_map(), - body: None, - } - } - - pub fn filter_list_plugins_request( - &self, - context: WPContext, - params: &Option, // UniFFI doesn't support Option<&T> - fields: &[SparsePluginField], - ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self - .api_endpoint - .plugins - .filter_list(context, params.as_ref(), fields) - .into(), - header_map: self.header_map(), - body: None, - } - } - - pub fn create_plugin_request(&self, params: &PluginCreateParams) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::POST, - url: self.api_endpoint.plugins.create().into(), - header_map: self.header_map_for_post_request(), - body: serde_json::to_vec(¶ms).ok(), - } - } +#[uniffi::export] +impl WPApiHelper { + #[uniffi::constructor] + pub fn new(site_url: String, authentication: WPAuthentication) -> Self { + let url = Url::parse(site_url.as_str()).unwrap(); + // TODO: Handle the url parse error + let api_endpoint = ApiEndpoint::new_from_str(site_url.as_str()).unwrap(); - pub fn retrieve_plugin_request( - &self, - context: WPContext, - plugin: &PluginSlug, - ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self.api_endpoint.plugins.retrieve(context, plugin).into(), - header_map: self.header_map(), - body: None, + Self { + api_endpoint, + authentication, } } - pub fn filter_retrieve_plugin_request( - &self, - context: WPContext, - plugin: &PluginSlug, - fields: &[SparsePluginField], - ) -> WPNetworkRequest { + // TODO: Remove this because we want to build all requests within the crate + pub fn raw_request(&self, url: String) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, - url: self - .api_endpoint - .plugins - .filter_retrieve(context, plugin, fields) - .into(), - header_map: self.header_map(), - body: None, - } - } - - pub fn update_plugin_request( - &self, - plugin: &PluginSlug, - params: &PluginUpdateParams, - ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::POST, - url: self.api_endpoint.plugins.update(plugin).into(), - header_map: self.header_map_for_post_request(), - body: serde_json::to_vec(¶ms).ok(), - } - } - - pub fn delete_plugin_request(&self, plugin: &PluginSlug) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::DELETE, - url: self.api_endpoint.plugins.delete(plugin).into(), + url: ApiEndpointUrl::new(Url::parse(url.as_str()).unwrap()).into(), header_map: self.header_map(), body: None, } From a9378b137839a7aa264b9481b6091a5b449d5e71 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 24 May 2024 10:52:39 -0400 Subject: [PATCH 02/11] Shorten names in user & plugin request builder --- wp_api/src/lib.rs | 52 ++++++++++++++++------------------------------- 1 file changed, 18 insertions(+), 34 deletions(-) diff --git a/wp_api/src/lib.rs b/wp_api/src/lib.rs index 992d551cf..f04a24e57 100644 --- a/wp_api/src/lib.rs +++ b/wp_api/src/lib.rs @@ -42,7 +42,7 @@ struct RequestBuilder {} struct PluginRequestBuilder {} impl PluginRequestBuilder { - pub fn list_plugins_request( + pub fn list( &self, context: WPContext, params: &Option, // UniFFI doesn't support Option<&T> @@ -59,7 +59,7 @@ impl PluginRequestBuilder { } } - pub fn filter_list_plugins_request( + pub fn filter_list( &self, context: WPContext, params: &Option, // UniFFI doesn't support Option<&T> @@ -77,7 +77,7 @@ impl PluginRequestBuilder { } } - pub fn create_plugin_request(&self, params: &PluginCreateParams) -> WPNetworkRequest { + pub fn create(&self, params: &PluginCreateParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, url: self.api_endpoint.plugins.create().into(), @@ -86,11 +86,7 @@ impl PluginRequestBuilder { } } - pub fn retrieve_plugin_request( - &self, - context: WPContext, - plugin: &PluginSlug, - ) -> WPNetworkRequest { + pub fn retrieve(&self, context: WPContext, plugin: &PluginSlug) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, url: self.api_endpoint.plugins.retrieve(context, plugin).into(), @@ -99,7 +95,7 @@ impl PluginRequestBuilder { } } - pub fn filter_retrieve_plugin_request( + pub fn filter_retrieve( &self, context: WPContext, plugin: &PluginSlug, @@ -117,11 +113,7 @@ impl PluginRequestBuilder { } } - pub fn update_plugin_request( - &self, - plugin: &PluginSlug, - params: &PluginUpdateParams, - ) -> WPNetworkRequest { + pub fn update(&self, plugin: &PluginSlug, params: &PluginUpdateParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, url: self.api_endpoint.plugins.update(plugin).into(), @@ -130,7 +122,7 @@ impl PluginRequestBuilder { } } - pub fn delete_plugin_request(&self, plugin: &PluginSlug) -> WPNetworkRequest { + pub fn delete(&self, plugin: &PluginSlug) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::DELETE, url: self.api_endpoint.plugins.delete(plugin).into(), @@ -143,7 +135,7 @@ impl PluginRequestBuilder { struct UserRequestBuilder {} impl UserRequestBuilder { - pub fn list_users_request( + pub fn list( &self, context: WPContext, params: &Option, // UniFFI doesn't support Option<&T> @@ -160,7 +152,7 @@ impl UserRequestBuilder { } } - pub fn filter_list_users_request( + pub fn filter_list( &self, context: WPContext, params: &Option, // UniFFI doesn't support Option<&T> @@ -178,7 +170,7 @@ impl UserRequestBuilder { } } - pub fn retrieve_user_request(&self, user_id: UserId, context: WPContext) -> WPNetworkRequest { + pub fn retrieve(&self, user_id: UserId, context: WPContext) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, url: self.api_endpoint.users.retrieve(user_id, context).into(), @@ -187,7 +179,7 @@ impl UserRequestBuilder { } } - pub fn filter_retrieve_user_request( + pub fn filter_retrieve( &self, user_id: UserId, context: WPContext, @@ -205,7 +197,7 @@ impl UserRequestBuilder { } } - pub fn retrieve_current_user_request(&self, context: WPContext) -> WPNetworkRequest { + pub fn retrieve_me(&self, context: WPContext) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, url: self.api_endpoint.users.retrieve_me(context).into(), @@ -214,7 +206,7 @@ impl UserRequestBuilder { } } - pub fn filter_retrieve_current_user_request( + pub fn filter_retrieve_me( &self, context: WPContext, fields: &[SparseUserField], @@ -231,7 +223,7 @@ impl UserRequestBuilder { } } - pub fn create_user_request(&self, params: &UserCreateParams) -> WPNetworkRequest { + pub fn create(&self, params: &UserCreateParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, url: self.api_endpoint.users.create().into(), @@ -240,11 +232,7 @@ impl UserRequestBuilder { } } - pub fn update_user_request( - &self, - user_id: UserId, - params: &UserUpdateParams, - ) -> WPNetworkRequest { + pub fn update(&self, user_id: UserId, params: &UserUpdateParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, url: self.api_endpoint.users.update(user_id).into(), @@ -253,7 +241,7 @@ impl UserRequestBuilder { } } - pub fn update_current_user_request(&self, params: &UserUpdateParams) -> WPNetworkRequest { + pub fn update_me(&self, params: &UserUpdateParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, url: self.api_endpoint.users.update_me().into(), @@ -262,11 +250,7 @@ impl UserRequestBuilder { } } - pub fn delete_user_request( - &self, - user_id: UserId, - params: &UserDeleteParams, - ) -> WPNetworkRequest { + pub fn delete(&self, user_id: UserId, params: &UserDeleteParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::DELETE, url: self.api_endpoint.users.delete(user_id, params).into(), @@ -275,7 +259,7 @@ impl UserRequestBuilder { } } - pub fn delete_current_user_request(&self, params: &UserDeleteParams) -> WPNetworkRequest { + pub fn delete_me(&self, params: &UserDeleteParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::DELETE, url: self.api_endpoint.users.delete_me(params).into(), From 1cf9e0053c37a7b5e921bb44b044345fb8fd4117 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 24 May 2024 10:55:53 -0400 Subject: [PATCH 03/11] Move users & plugin request builders to request module --- wp_api/src/lib.rs | 232 -------------------------- wp_api/src/request.rs | 2 + wp_api/src/request/plugins_request.rs | 92 ++++++++++ wp_api/src/request/users_request.rs | 136 +++++++++++++++ 4 files changed, 230 insertions(+), 232 deletions(-) create mode 100644 wp_api/src/request/plugins_request.rs create mode 100644 wp_api/src/request/users_request.rs diff --git a/wp_api/src/lib.rs b/wp_api/src/lib.rs index f04a24e57..67ac853cb 100644 --- a/wp_api/src/lib.rs +++ b/wp_api/src/lib.rs @@ -37,238 +37,6 @@ fn wp_authentication_from_username_and_password( WPAuthentication::from_username_and_password(username, password) } -struct RequestBuilder {} - -struct PluginRequestBuilder {} - -impl PluginRequestBuilder { - pub fn list( - &self, - context: WPContext, - params: &Option, // UniFFI doesn't support Option<&T> - ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self - .api_endpoint - .plugins - .list(context, params.as_ref()) - .into(), - header_map: self.header_map(), - body: None, - } - } - - pub fn filter_list( - &self, - context: WPContext, - params: &Option, // UniFFI doesn't support Option<&T> - fields: &[SparsePluginField], - ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self - .api_endpoint - .plugins - .filter_list(context, params.as_ref(), fields) - .into(), - header_map: self.header_map(), - body: None, - } - } - - pub fn create(&self, params: &PluginCreateParams) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::POST, - url: self.api_endpoint.plugins.create().into(), - header_map: self.header_map_for_post_request(), - body: serde_json::to_vec(¶ms).ok(), - } - } - - pub fn retrieve(&self, context: WPContext, plugin: &PluginSlug) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self.api_endpoint.plugins.retrieve(context, plugin).into(), - header_map: self.header_map(), - body: None, - } - } - - pub fn filter_retrieve( - &self, - context: WPContext, - plugin: &PluginSlug, - fields: &[SparsePluginField], - ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self - .api_endpoint - .plugins - .filter_retrieve(context, plugin, fields) - .into(), - header_map: self.header_map(), - body: None, - } - } - - pub fn update(&self, plugin: &PluginSlug, params: &PluginUpdateParams) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::POST, - url: self.api_endpoint.plugins.update(plugin).into(), - header_map: self.header_map_for_post_request(), - body: serde_json::to_vec(¶ms).ok(), - } - } - - pub fn delete(&self, plugin: &PluginSlug) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::DELETE, - url: self.api_endpoint.plugins.delete(plugin).into(), - header_map: self.header_map(), - body: None, - } - } -} - -struct UserRequestBuilder {} - -impl UserRequestBuilder { - pub fn list( - &self, - context: WPContext, - params: &Option, // UniFFI doesn't support Option<&T> - ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self - .api_endpoint - .users - .list(context, params.as_ref()) - .into(), - header_map: self.header_map(), - body: None, - } - } - - pub fn filter_list( - &self, - context: WPContext, - params: &Option, // UniFFI doesn't support Option<&T> - fields: &[SparseUserField], - ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self - .api_endpoint - .users - .filter_list(context, params.as_ref(), fields) - .into(), - header_map: self.header_map(), - body: None, - } - } - - pub fn retrieve(&self, user_id: UserId, context: WPContext) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self.api_endpoint.users.retrieve(user_id, context).into(), - header_map: self.header_map(), - body: None, - } - } - - pub fn filter_retrieve( - &self, - user_id: UserId, - context: WPContext, - fields: &[SparseUserField], - ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self - .api_endpoint - .users - .filter_retrieve(user_id, context, fields) - .into(), - header_map: self.header_map(), - body: None, - } - } - - pub fn retrieve_me(&self, context: WPContext) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self.api_endpoint.users.retrieve_me(context).into(), - header_map: self.header_map(), - body: None, - } - } - - pub fn filter_retrieve_me( - &self, - context: WPContext, - fields: &[SparseUserField], - ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self - .api_endpoint - .users - .filter_retrieve_me(context, fields) - .into(), - header_map: self.header_map(), - body: None, - } - } - - pub fn create(&self, params: &UserCreateParams) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::POST, - url: self.api_endpoint.users.create().into(), - header_map: self.header_map_for_post_request(), - body: serde_json::to_vec(¶ms).ok(), - } - } - - pub fn update(&self, user_id: UserId, params: &UserUpdateParams) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::POST, - url: self.api_endpoint.users.update(user_id).into(), - header_map: self.header_map_for_post_request(), - body: serde_json::to_vec(¶ms).ok(), - } - } - - pub fn update_me(&self, params: &UserUpdateParams) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::POST, - url: self.api_endpoint.users.update_me().into(), - header_map: self.header_map_for_post_request(), - body: serde_json::to_vec(¶ms).ok(), - } - } - - pub fn delete(&self, user_id: UserId, params: &UserDeleteParams) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::DELETE, - url: self.api_endpoint.users.delete(user_id, params).into(), - header_map: self.header_map(), - body: None, - } - } - - pub fn delete_me(&self, params: &UserDeleteParams) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::DELETE, - url: self.api_endpoint.users.delete_me(params).into(), - header_map: self.header_map(), - body: None, - } - } -} - #[uniffi::export] impl WPApiHelper { #[uniffi::constructor] diff --git a/wp_api/src/request.rs b/wp_api/src/request.rs index 9132e940d..d9b69a09b 100644 --- a/wp_api/src/request.rs +++ b/wp_api/src/request.rs @@ -8,6 +8,8 @@ use crate::WPApiError; use self::endpoint::WpEndpointUrl; pub mod endpoint; +pub mod plugins_request; +pub mod users_request; // Has custom `Debug` trait implementation #[derive(uniffi::Record)] diff --git a/wp_api/src/request/plugins_request.rs b/wp_api/src/request/plugins_request.rs new file mode 100644 index 000000000..a9e14798d --- /dev/null +++ b/wp_api/src/request/plugins_request.rs @@ -0,0 +1,92 @@ +struct PluginsRequest {} + +impl PluginsRequest { + pub fn list( + &self, + context: WPContext, + params: &Option, // UniFFI doesn't support Option<&T> + ) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::GET, + url: self + .api_endpoint + .plugins + .list(context, params.as_ref()) + .into(), + header_map: self.header_map(), + body: None, + } + } + + pub fn filter_list( + &self, + context: WPContext, + params: &Option, // UniFFI doesn't support Option<&T> + fields: &[SparsePluginField], + ) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::GET, + url: self + .api_endpoint + .plugins + .filter_list(context, params.as_ref(), fields) + .into(), + header_map: self.header_map(), + body: None, + } + } + + pub fn create(&self, params: &PluginCreateParams) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::POST, + url: self.api_endpoint.plugins.create().into(), + header_map: self.header_map_for_post_request(), + body: serde_json::to_vec(¶ms).ok(), + } + } + + pub fn retrieve(&self, context: WPContext, plugin: &PluginSlug) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::GET, + url: self.api_endpoint.plugins.retrieve(context, plugin).into(), + header_map: self.header_map(), + body: None, + } + } + + pub fn filter_retrieve( + &self, + context: WPContext, + plugin: &PluginSlug, + fields: &[SparsePluginField], + ) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::GET, + url: self + .api_endpoint + .plugins + .filter_retrieve(context, plugin, fields) + .into(), + header_map: self.header_map(), + body: None, + } + } + + pub fn update(&self, plugin: &PluginSlug, params: &PluginUpdateParams) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::POST, + url: self.api_endpoint.plugins.update(plugin).into(), + header_map: self.header_map_for_post_request(), + body: serde_json::to_vec(¶ms).ok(), + } + } + + pub fn delete(&self, plugin: &PluginSlug) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::DELETE, + url: self.api_endpoint.plugins.delete(plugin).into(), + header_map: self.header_map(), + body: None, + } + } +} diff --git a/wp_api/src/request/users_request.rs b/wp_api/src/request/users_request.rs new file mode 100644 index 000000000..ab8cd4864 --- /dev/null +++ b/wp_api/src/request/users_request.rs @@ -0,0 +1,136 @@ +struct UsersRequest {} + +impl UsersRequest { + pub fn list( + &self, + context: WPContext, + params: &Option, // UniFFI doesn't support Option<&T> + ) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::GET, + url: self + .api_endpoint + .users + .list(context, params.as_ref()) + .into(), + header_map: self.header_map(), + body: None, + } + } + + pub fn filter_list( + &self, + context: WPContext, + params: &Option, // UniFFI doesn't support Option<&T> + fields: &[SparseUserField], + ) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::GET, + url: self + .api_endpoint + .users + .filter_list(context, params.as_ref(), fields) + .into(), + header_map: self.header_map(), + body: None, + } + } + + pub fn retrieve(&self, user_id: UserId, context: WPContext) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::GET, + url: self.api_endpoint.users.retrieve(user_id, context).into(), + header_map: self.header_map(), + body: None, + } + } + + pub fn filter_retrieve( + &self, + user_id: UserId, + context: WPContext, + fields: &[SparseUserField], + ) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::GET, + url: self + .api_endpoint + .users + .filter_retrieve(user_id, context, fields) + .into(), + header_map: self.header_map(), + body: None, + } + } + + pub fn retrieve_me(&self, context: WPContext) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::GET, + url: self.api_endpoint.users.retrieve_me(context).into(), + header_map: self.header_map(), + body: None, + } + } + + pub fn filter_retrieve_me( + &self, + context: WPContext, + fields: &[SparseUserField], + ) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::GET, + url: self + .api_endpoint + .users + .filter_retrieve_me(context, fields) + .into(), + header_map: self.header_map(), + body: None, + } + } + + pub fn create(&self, params: &UserCreateParams) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::POST, + url: self.api_endpoint.users.create().into(), + header_map: self.header_map_for_post_request(), + body: serde_json::to_vec(¶ms).ok(), + } + } + + pub fn update(&self, user_id: UserId, params: &UserUpdateParams) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::POST, + url: self.api_endpoint.users.update(user_id).into(), + header_map: self.header_map_for_post_request(), + body: serde_json::to_vec(¶ms).ok(), + } + } + + pub fn update_me(&self, params: &UserUpdateParams) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::POST, + url: self.api_endpoint.users.update_me().into(), + header_map: self.header_map_for_post_request(), + body: serde_json::to_vec(¶ms).ok(), + } + } + + pub fn delete(&self, user_id: UserId, params: &UserDeleteParams) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::DELETE, + url: self.api_endpoint.users.delete(user_id, params).into(), + header_map: self.header_map(), + body: None, + } + } + + pub fn delete_me(&self, params: &UserDeleteParams) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::DELETE, + url: self.api_endpoint.users.delete_me(params).into(), + header_map: self.header_map(), + body: None, + } + } +} From 8d977af638a76a9b7db4ae5f180fdfd18e7d444b Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 24 May 2024 12:18:25 -0400 Subject: [PATCH 04/11] Use users & plugins request in WPApiHelper --- wp_api/src/lib.rs | 185 ++++++++++++++++++++++---- wp_api/src/request/endpoint.rs | 4 +- wp_api/src/request/plugins_request.rs | 50 ++++--- wp_api/src/request/users_request.rs | 70 +++++----- 4 files changed, 227 insertions(+), 82 deletions(-) diff --git a/wp_api/src/lib.rs b/wp_api/src/lib.rs index 67ac853cb..f88fe4db4 100644 --- a/wp_api/src/lib.rs +++ b/wp_api/src/lib.rs @@ -2,6 +2,8 @@ use request::{ endpoint::{ApiEndpoint, ApiEndpointUrl}, + plugins_request::PluginsRequest, + users_request::UsersRequest, RequestMethod, WPNetworkRequest, WPNetworkResponse, }; use std::collections::HashMap; @@ -25,8 +27,9 @@ const CONTENT_TYPE_JSON: &str = "application/json"; #[derive(Debug, uniffi::Object)] pub struct WPApiHelper { - api_endpoint: ApiEndpoint, authentication: WPAuthentication, + users_request: UsersRequest, + plugins_request: PluginsRequest, } #[uniffi::export] @@ -46,8 +49,17 @@ impl WPApiHelper { let api_endpoint = ApiEndpoint::new_from_str(site_url.as_str()).unwrap(); Self { - api_endpoint, - authentication, + authentication: authentication.clone(), + users_request: UsersRequest { + endpoint: api_endpoint.users, + header_map: header_map(&authentication), + header_map_for_post_request: header_map_for_post_request(&authentication), + }, + plugins_request: PluginsRequest { + endpoint: api_endpoint.plugins, + header_map: header_map(&authentication), + header_map_for_post_request: header_map_for_post_request(&authentication), + }, } } @@ -56,34 +68,155 @@ impl WPApiHelper { WPNetworkRequest { method: RequestMethod::GET, url: ApiEndpointUrl::new(Url::parse(url.as_str()).unwrap()).into(), - header_map: self.header_map(), + header_map: header_map(&self.authentication), body: None, } } - fn header_map(&self) -> HashMap { - let mut header_map = HashMap::new(); - header_map.insert( - http::header::ACCEPT.to_string(), - CONTENT_TYPE_JSON.to_string(), - ); - match &self.authentication { - WPAuthentication::None => None, - WPAuthentication::AuthorizationHeader { token } => { - header_map.insert("Authorization".to_string(), format!("Basic {}", token)) - } - }; - header_map - } - - fn header_map_for_post_request(&self) -> HashMap { - let mut header_map = self.header_map(); - header_map.insert( - http::header::CONTENT_TYPE.to_string(), - CONTENT_TYPE_JSON.to_string(), - ); - header_map + pub fn list_users_request( + &self, + context: WPContext, + params: &Option, // UniFFI doesn't support Option<&T> + ) -> WPNetworkRequest { + self.users_request.list(context, params) } + + pub fn filter_list_users_request( + &self, + context: WPContext, + params: &Option, // UniFFI doesn't support Option<&T> + fields: &[SparseUserField], + ) -> WPNetworkRequest { + self.users_request.filter_list(context, params, fields) + } + + pub fn retrieve_user_request(&self, user_id: UserId, context: WPContext) -> WPNetworkRequest { + self.users_request.retrieve(user_id, context) + } + + pub fn filter_retrieve_user_request( + &self, + user_id: UserId, + context: WPContext, + fields: &[SparseUserField], + ) -> WPNetworkRequest { + self.users_request.filter_retrieve(user_id, context, fields) + } + + pub fn retrieve_current_user_request(&self, context: WPContext) -> WPNetworkRequest { + self.users_request.retrieve_me(context) + } + + pub fn filter_retrieve_current_user_request( + &self, + context: WPContext, + fields: &[SparseUserField], + ) -> WPNetworkRequest { + self.users_request.filter_retrieve_me(context, fields) + } + + pub fn create_user_request(&self, params: &UserCreateParams) -> WPNetworkRequest { + self.users_request.create(params) + } + + pub fn update_user_request( + &self, + user_id: UserId, + params: &UserUpdateParams, + ) -> WPNetworkRequest { + self.users_request.update(user_id, params) + } + + pub fn update_current_user_request(&self, params: &UserUpdateParams) -> WPNetworkRequest { + self.users_request.update_me(params) + } + + pub fn delete_user_request( + &self, + user_id: UserId, + params: &UserDeleteParams, + ) -> WPNetworkRequest { + self.users_request.delete(user_id, params) + } + + pub fn delete_current_user_request(&self, params: &UserDeleteParams) -> WPNetworkRequest { + self.users_request.delete_me(params) + } + + pub fn list_plugins_request( + &self, + context: WPContext, + params: &Option, // UniFFI doesn't support Option<&T> + ) -> WPNetworkRequest { + self.plugins_request.list(context, params) + } + + pub fn filter_list_plugins_request( + &self, + context: WPContext, + params: &Option, // UniFFI doesn't support Option<&T> + fields: &[SparsePluginField], + ) -> WPNetworkRequest { + self.plugins_request.filter_list(context, params, fields) + } + + pub fn create_plugin_request(&self, params: &PluginCreateParams) -> WPNetworkRequest { + self.plugins_request.create(params) + } + + pub fn retrieve_plugin_request( + &self, + context: WPContext, + plugin: &PluginSlug, + ) -> WPNetworkRequest { + self.plugins_request.retrieve(context, plugin) + } + + pub fn filter_retrieve_plugin_request( + &self, + context: WPContext, + plugin: &PluginSlug, + fields: &[SparsePluginField], + ) -> WPNetworkRequest { + self.plugins_request + .filter_retrieve(context, plugin, fields) + } + + pub fn update_plugin_request( + &self, + plugin: &PluginSlug, + params: &PluginUpdateParams, + ) -> WPNetworkRequest { + self.plugins_request.update(plugin, params) + } + + pub fn delete_plugin_request(&self, plugin: &PluginSlug) -> WPNetworkRequest { + self.plugins_request.delete(plugin) + } +} + +fn header_map(authentication: &WPAuthentication) -> HashMap { + let mut header_map = HashMap::new(); + header_map.insert( + http::header::ACCEPT.to_string(), + CONTENT_TYPE_JSON.to_string(), + ); + match authentication { + WPAuthentication::None => None, + WPAuthentication::AuthorizationHeader { ref token } => { + header_map.insert("Authorization".to_string(), format!("Basic {}", token)) + } + }; + header_map +} + +fn header_map_for_post_request(authentication: &WPAuthentication) -> HashMap { + let mut header_map = header_map(authentication); + header_map.insert( + http::header::CONTENT_TYPE.to_string(), + CONTENT_TYPE_JSON.to_string(), + ); + header_map } #[derive(Debug, Default, Clone, Copy, PartialEq, Eq, uniffi::Enum)] diff --git a/wp_api/src/request/endpoint.rs b/wp_api/src/request/endpoint.rs index c670b0f06..7dbf98688 100644 --- a/wp_api/src/request/endpoint.rs +++ b/wp_api/src/request/endpoint.rs @@ -5,8 +5,8 @@ use users_endpoint::*; use crate::SparseField; -mod plugins_endpoint; -mod users_endpoint; +pub(crate) mod plugins_endpoint; +pub(crate) mod users_endpoint; const WP_JSON_PATH_SEGMENTS: [&str; 3] = ["wp-json", "wp", "v2"]; diff --git a/wp_api/src/request/plugins_request.rs b/wp_api/src/request/plugins_request.rs index a9e14798d..e74d94ab6 100644 --- a/wp_api/src/request/plugins_request.rs +++ b/wp_api/src/request/plugins_request.rs @@ -1,4 +1,18 @@ -struct PluginsRequest {} +use std::collections::HashMap; + +use crate::{ + PluginCreateParams, PluginListParams, PluginSlug, PluginUpdateParams, SparsePluginField, + WPContext, +}; + +use super::{endpoint::plugins_endpoint::PluginsEndpoint, RequestMethod, WPNetworkRequest}; + +#[derive(Debug)] +pub(crate) struct PluginsRequest { + pub endpoint: PluginsEndpoint, + pub header_map: HashMap, + pub header_map_for_post_request: HashMap, +} impl PluginsRequest { pub fn list( @@ -8,12 +22,8 @@ impl PluginsRequest { ) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, - url: self - .api_endpoint - .plugins - .list(context, params.as_ref()) - .into(), - header_map: self.header_map(), + url: self.endpoint.list(context, params.as_ref()).into(), + header_map: self.header_map.clone(), body: None, } } @@ -27,11 +37,10 @@ impl PluginsRequest { WPNetworkRequest { method: RequestMethod::GET, url: self - .api_endpoint - .plugins + .endpoint .filter_list(context, params.as_ref(), fields) .into(), - header_map: self.header_map(), + header_map: self.header_map.clone(), body: None, } } @@ -39,8 +48,8 @@ impl PluginsRequest { pub fn create(&self, params: &PluginCreateParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, - url: self.api_endpoint.plugins.create().into(), - header_map: self.header_map_for_post_request(), + url: self.endpoint.create().into(), + header_map: self.header_map_for_post_request.clone(), body: serde_json::to_vec(¶ms).ok(), } } @@ -48,8 +57,8 @@ impl PluginsRequest { pub fn retrieve(&self, context: WPContext, plugin: &PluginSlug) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, - url: self.api_endpoint.plugins.retrieve(context, plugin).into(), - header_map: self.header_map(), + url: self.endpoint.retrieve(context, plugin).into(), + header_map: self.header_map.clone(), body: None, } } @@ -63,11 +72,10 @@ impl PluginsRequest { WPNetworkRequest { method: RequestMethod::GET, url: self - .api_endpoint - .plugins + .endpoint .filter_retrieve(context, plugin, fields) .into(), - header_map: self.header_map(), + header_map: self.header_map.clone(), body: None, } } @@ -75,8 +83,8 @@ impl PluginsRequest { pub fn update(&self, plugin: &PluginSlug, params: &PluginUpdateParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, - url: self.api_endpoint.plugins.update(plugin).into(), - header_map: self.header_map_for_post_request(), + url: self.endpoint.update(plugin).into(), + header_map: self.header_map_for_post_request.clone(), body: serde_json::to_vec(¶ms).ok(), } } @@ -84,8 +92,8 @@ impl PluginsRequest { pub fn delete(&self, plugin: &PluginSlug) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::DELETE, - url: self.api_endpoint.plugins.delete(plugin).into(), - header_map: self.header_map(), + url: self.endpoint.delete(plugin).into(), + header_map: self.header_map.clone(), body: None, } } diff --git a/wp_api/src/request/users_request.rs b/wp_api/src/request/users_request.rs index ab8cd4864..6bf9404e4 100644 --- a/wp_api/src/request/users_request.rs +++ b/wp_api/src/request/users_request.rs @@ -1,4 +1,18 @@ -struct UsersRequest {} +use std::collections::HashMap; + +use crate::{ + SparseUserField, UserCreateParams, UserDeleteParams, UserId, UserListParams, UserUpdateParams, + WPContext, +}; + +use super::{endpoint::users_endpoint::UsersEndpoint, RequestMethod, WPNetworkRequest}; + +#[derive(Debug)] +pub(crate) struct UsersRequest { + pub endpoint: UsersEndpoint, + pub header_map: HashMap, + pub header_map_for_post_request: HashMap, +} impl UsersRequest { pub fn list( @@ -8,12 +22,8 @@ impl UsersRequest { ) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, - url: self - .api_endpoint - .users - .list(context, params.as_ref()) - .into(), - header_map: self.header_map(), + url: self.endpoint.list(context, params.as_ref()).into(), + header_map: self.header_map.clone(), body: None, } } @@ -27,11 +37,10 @@ impl UsersRequest { WPNetworkRequest { method: RequestMethod::GET, url: self - .api_endpoint - .users + .endpoint .filter_list(context, params.as_ref(), fields) .into(), - header_map: self.header_map(), + header_map: self.header_map.clone(), body: None, } } @@ -39,8 +48,8 @@ impl UsersRequest { pub fn retrieve(&self, user_id: UserId, context: WPContext) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, - url: self.api_endpoint.users.retrieve(user_id, context).into(), - header_map: self.header_map(), + url: self.endpoint.retrieve(user_id, context).into(), + header_map: self.header_map.clone(), body: None, } } @@ -54,11 +63,10 @@ impl UsersRequest { WPNetworkRequest { method: RequestMethod::GET, url: self - .api_endpoint - .users + .endpoint .filter_retrieve(user_id, context, fields) .into(), - header_map: self.header_map(), + header_map: self.header_map.clone(), body: None, } } @@ -66,8 +74,8 @@ impl UsersRequest { pub fn retrieve_me(&self, context: WPContext) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, - url: self.api_endpoint.users.retrieve_me(context).into(), - header_map: self.header_map(), + url: self.endpoint.retrieve_me(context).into(), + header_map: self.header_map.clone(), body: None, } } @@ -79,12 +87,8 @@ impl UsersRequest { ) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, - url: self - .api_endpoint - .users - .filter_retrieve_me(context, fields) - .into(), - header_map: self.header_map(), + url: self.endpoint.filter_retrieve_me(context, fields).into(), + header_map: self.header_map.clone(), body: None, } } @@ -92,8 +96,8 @@ impl UsersRequest { pub fn create(&self, params: &UserCreateParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, - url: self.api_endpoint.users.create().into(), - header_map: self.header_map_for_post_request(), + url: self.endpoint.create().into(), + header_map: self.header_map_for_post_request.clone(), body: serde_json::to_vec(¶ms).ok(), } } @@ -101,8 +105,8 @@ impl UsersRequest { pub fn update(&self, user_id: UserId, params: &UserUpdateParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, - url: self.api_endpoint.users.update(user_id).into(), - header_map: self.header_map_for_post_request(), + url: self.endpoint.update(user_id).into(), + header_map: self.header_map_for_post_request.clone(), body: serde_json::to_vec(¶ms).ok(), } } @@ -110,8 +114,8 @@ impl UsersRequest { pub fn update_me(&self, params: &UserUpdateParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, - url: self.api_endpoint.users.update_me().into(), - header_map: self.header_map_for_post_request(), + url: self.endpoint.update_me().into(), + header_map: self.header_map_for_post_request.clone(), body: serde_json::to_vec(¶ms).ok(), } } @@ -119,8 +123,8 @@ impl UsersRequest { pub fn delete(&self, user_id: UserId, params: &UserDeleteParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::DELETE, - url: self.api_endpoint.users.delete(user_id, params).into(), - header_map: self.header_map(), + url: self.endpoint.delete(user_id, params).into(), + header_map: self.header_map.clone(), body: None, } } @@ -128,8 +132,8 @@ impl UsersRequest { pub fn delete_me(&self, params: &UserDeleteParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::DELETE, - url: self.api_endpoint.users.delete_me(params).into(), - header_map: self.header_map(), + url: self.endpoint.delete_me(params).into(), + header_map: self.header_map.clone(), body: None, } } From a7a66d75b8cea0ca0c331ddd090007f0d54d19b4 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 24 May 2024 13:11:16 -0400 Subject: [PATCH 05/11] Remove ApiEndpoint --- wp_api/src/lib.rs | 24 ++++++++++++------------ wp_api/src/request/endpoint.rs | 24 ------------------------ wp_api/src/request/plugins_request.rs | 23 +++++++++++++++++++---- wp_api/src/request/users_request.rs | 23 +++++++++++++++++++---- 4 files changed, 50 insertions(+), 44 deletions(-) diff --git a/wp_api/src/lib.rs b/wp_api/src/lib.rs index f88fe4db4..2e50d2481 100644 --- a/wp_api/src/lib.rs +++ b/wp_api/src/lib.rs @@ -1,7 +1,7 @@ #![allow(dead_code, unused_variables)] use request::{ - endpoint::{ApiEndpoint, ApiEndpointUrl}, + endpoint::{ApiBaseUrl, ApiEndpointUrl}, plugins_request::PluginsRequest, users_request::UsersRequest, RequestMethod, WPNetworkRequest, WPNetworkResponse, @@ -46,20 +46,20 @@ impl WPApiHelper { pub fn new(site_url: String, authentication: WPAuthentication) -> Self { let url = Url::parse(site_url.as_str()).unwrap(); // TODO: Handle the url parse error - let api_endpoint = ApiEndpoint::new_from_str(site_url.as_str()).unwrap(); + let api_base_url = ApiBaseUrl::new(site_url.as_str()).unwrap(); Self { authentication: authentication.clone(), - users_request: UsersRequest { - endpoint: api_endpoint.users, - header_map: header_map(&authentication), - header_map_for_post_request: header_map_for_post_request(&authentication), - }, - plugins_request: PluginsRequest { - endpoint: api_endpoint.plugins, - header_map: header_map(&authentication), - header_map_for_post_request: header_map_for_post_request(&authentication), - }, + users_request: UsersRequest::new( + api_base_url.clone(), + header_map(&authentication), + header_map_for_post_request(&authentication), + ), + plugins_request: PluginsRequest::new( + api_base_url.clone(), + header_map(&authentication), + header_map_for_post_request(&authentication), + ), } } diff --git a/wp_api/src/request/endpoint.rs b/wp_api/src/request/endpoint.rs index 7dbf98688..ff90b5c5b 100644 --- a/wp_api/src/request/endpoint.rs +++ b/wp_api/src/request/endpoint.rs @@ -1,8 +1,5 @@ use url::Url; -use plugins_endpoint::*; -use users_endpoint::*; - use crate::SparseField; pub(crate) mod plugins_endpoint; @@ -83,27 +80,6 @@ impl ApiBaseUrl { } } -#[derive(Debug)] -pub(crate) struct ApiEndpoint { - pub base_url: ApiBaseUrl, - pub users: UsersEndpoint, - pub plugins: PluginsEndpoint, -} - -impl ApiEndpoint { - pub fn new(api_base_url: ApiBaseUrl) -> Self { - Self { - base_url: api_base_url.clone(), - users: UsersEndpoint::new(api_base_url.clone()), - plugins: PluginsEndpoint::new(api_base_url.clone()), - } - } - - pub fn new_from_str(site_base_url: &str) -> Result { - ApiBaseUrl::new(site_base_url).map(Self::new) - } -} - trait UrlExtension { fn append(self, segment: &str) -> Result; fn extend(self, segments: I) -> Result diff --git a/wp_api/src/request/plugins_request.rs b/wp_api/src/request/plugins_request.rs index e74d94ab6..c7a3f3453 100644 --- a/wp_api/src/request/plugins_request.rs +++ b/wp_api/src/request/plugins_request.rs @@ -5,16 +5,31 @@ use crate::{ WPContext, }; -use super::{endpoint::plugins_endpoint::PluginsEndpoint, RequestMethod, WPNetworkRequest}; +use super::{ + endpoint::{plugins_endpoint::PluginsEndpoint, ApiBaseUrl}, + RequestMethod, WPNetworkRequest, +}; #[derive(Debug)] pub(crate) struct PluginsRequest { - pub endpoint: PluginsEndpoint, - pub header_map: HashMap, - pub header_map_for_post_request: HashMap, + endpoint: PluginsEndpoint, + header_map: HashMap, + header_map_for_post_request: HashMap, } impl PluginsRequest { + pub fn new( + api_base_url: ApiBaseUrl, + header_map: HashMap, + header_map_for_post_request: HashMap, + ) -> Self { + Self { + endpoint: PluginsEndpoint::new(api_base_url), + header_map, + header_map_for_post_request, + } + } + pub fn list( &self, context: WPContext, diff --git a/wp_api/src/request/users_request.rs b/wp_api/src/request/users_request.rs index 6bf9404e4..ded8cc3aa 100644 --- a/wp_api/src/request/users_request.rs +++ b/wp_api/src/request/users_request.rs @@ -5,16 +5,31 @@ use crate::{ WPContext, }; -use super::{endpoint::users_endpoint::UsersEndpoint, RequestMethod, WPNetworkRequest}; +use super::{ + endpoint::{users_endpoint::UsersEndpoint, ApiBaseUrl}, + RequestMethod, WPNetworkRequest, +}; #[derive(Debug)] pub(crate) struct UsersRequest { - pub endpoint: UsersEndpoint, - pub header_map: HashMap, - pub header_map_for_post_request: HashMap, + endpoint: UsersEndpoint, + header_map: HashMap, + header_map_for_post_request: HashMap, } impl UsersRequest { + pub fn new( + api_base_url: ApiBaseUrl, + header_map: HashMap, + header_map_for_post_request: HashMap, + ) -> Self { + Self { + endpoint: UsersEndpoint::new(api_base_url), + header_map, + header_map_for_post_request, + } + } + pub fn list( &self, context: WPContext, From 2e4ea26c6f94202dba3f420cfd938228c19d2d9a Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 24 May 2024 13:58:16 -0400 Subject: [PATCH 06/11] Introduce RequestBuilder and use it in UsersRequest --- wp_api/src/lib.rs | 51 +++++++- .../src/request/endpoint/plugins_endpoint.rs | 4 +- wp_api/src/request/endpoint/users_endpoint.rs | 7 +- wp_api/src/request/users_request.rs | 110 ++++-------------- 4 files changed, 74 insertions(+), 98 deletions(-) diff --git a/wp_api/src/lib.rs b/wp_api/src/lib.rs index 2e50d2481..a28d2dd51 100644 --- a/wp_api/src/lib.rs +++ b/wp_api/src/lib.rs @@ -6,7 +6,8 @@ use request::{ users_request::UsersRequest, RequestMethod, WPNetworkRequest, WPNetworkResponse, }; -use std::collections::HashMap; +use serde::Serialize; +use std::{collections::HashMap, sync::Arc}; use url::Url; pub use api_error::{WPApiError, WPRestError, WPRestErrorCode, WPRestErrorWrapper}; @@ -28,6 +29,7 @@ const CONTENT_TYPE_JSON: &str = "application/json"; #[derive(Debug, uniffi::Object)] pub struct WPApiHelper { authentication: WPAuthentication, + request_builder: Arc, users_request: UsersRequest, plugins_request: PluginsRequest, } @@ -47,14 +49,14 @@ impl WPApiHelper { let url = Url::parse(site_url.as_str()).unwrap(); // TODO: Handle the url parse error let api_base_url = ApiBaseUrl::new(site_url.as_str()).unwrap(); + let request_builder = Arc::new(RequestBuilder { + authentication: authentication.clone(), + }); Self { authentication: authentication.clone(), - users_request: UsersRequest::new( - api_base_url.clone(), - header_map(&authentication), - header_map_for_post_request(&authentication), - ), + request_builder: request_builder.clone(), + users_request: UsersRequest::new(api_base_url.clone(), request_builder.clone()), plugins_request: PluginsRequest::new( api_base_url.clone(), header_map(&authentication), @@ -195,6 +197,43 @@ impl WPApiHelper { } } +#[derive(Debug)] +struct RequestBuilder { + authentication: WPAuthentication, +} + +impl RequestBuilder { + fn get(&self, url: ApiEndpointUrl) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::GET, + url: url.into(), + header_map: header_map(&self.authentication), + body: None, + } + } + + fn post(&self, url: ApiEndpointUrl, json_body: &T) -> WPNetworkRequest + where + T: ?Sized + Serialize, + { + WPNetworkRequest { + method: RequestMethod::POST, + url: url.into(), + header_map: header_map_for_post_request(&self.authentication), + body: serde_json::to_vec(json_body).ok(), + } + } + + fn delete(&self, url: ApiEndpointUrl) -> WPNetworkRequest { + WPNetworkRequest { + method: RequestMethod::DELETE, + url: url.into(), + header_map: header_map(&self.authentication), + body: None, + } + } +} + fn header_map(authentication: &WPAuthentication) -> HashMap { let mut header_map = HashMap::new(); header_map.insert( diff --git a/wp_api/src/request/endpoint/plugins_endpoint.rs b/wp_api/src/request/endpoint/plugins_endpoint.rs index 20e6f51ab..be0be3eb4 100644 --- a/wp_api/src/request/endpoint/plugins_endpoint.rs +++ b/wp_api/src/request/endpoint/plugins_endpoint.rs @@ -84,7 +84,7 @@ mod tests { use crate::{ generate, request::endpoint::tests::{fixture_api_base_url, validate_endpoint}, - ApiEndpoint, PluginStatus, + PluginStatus, }; use rstest::*; @@ -239,6 +239,6 @@ mod tests { #[fixture] fn plugins_endpoint(fixture_api_base_url: ApiBaseUrl) -> PluginsEndpoint { - ApiEndpoint::new(fixture_api_base_url).plugins + PluginsEndpoint::new(fixture_api_base_url) } } diff --git a/wp_api/src/request/endpoint/users_endpoint.rs b/wp_api/src/request/endpoint/users_endpoint.rs index e6ed0a7d3..8d3ce2ee9 100644 --- a/wp_api/src/request/endpoint/users_endpoint.rs +++ b/wp_api/src/request/endpoint/users_endpoint.rs @@ -105,10 +105,7 @@ impl UsersEndpoint { #[cfg(test)] mod tests { use super::*; - use crate::{ - request::endpoint::tests::{fixture_api_base_url, validate_endpoint}, - ApiEndpoint, - }; + use crate::request::endpoint::tests::{fixture_api_base_url, validate_endpoint}; use rstest::*; #[rstest] @@ -244,6 +241,6 @@ mod tests { #[fixture] fn users_endpoint(fixture_api_base_url: ApiBaseUrl) -> UsersEndpoint { - ApiEndpoint::new(fixture_api_base_url).users + UsersEndpoint::new(fixture_api_base_url) } } diff --git a/wp_api/src/request/users_request.rs b/wp_api/src/request/users_request.rs index ded8cc3aa..d20c806ed 100644 --- a/wp_api/src/request/users_request.rs +++ b/wp_api/src/request/users_request.rs @@ -1,32 +1,26 @@ -use std::collections::HashMap; +use std::sync::Arc; use crate::{ - SparseUserField, UserCreateParams, UserDeleteParams, UserId, UserListParams, UserUpdateParams, - WPContext, + RequestBuilder, SparseUserField, UserCreateParams, UserDeleteParams, UserId, UserListParams, + UserUpdateParams, WPContext, }; use super::{ endpoint::{users_endpoint::UsersEndpoint, ApiBaseUrl}, - RequestMethod, WPNetworkRequest, + WPNetworkRequest, }; #[derive(Debug)] pub(crate) struct UsersRequest { endpoint: UsersEndpoint, - header_map: HashMap, - header_map_for_post_request: HashMap, + request_builder: Arc, } impl UsersRequest { - pub fn new( - api_base_url: ApiBaseUrl, - header_map: HashMap, - header_map_for_post_request: HashMap, - ) -> Self { + pub fn new(api_base_url: ApiBaseUrl, request_builder: Arc) -> Self { Self { endpoint: UsersEndpoint::new(api_base_url), - header_map, - header_map_for_post_request, + request_builder, } } @@ -35,12 +29,8 @@ impl UsersRequest { context: WPContext, params: &Option, // UniFFI doesn't support Option<&T> ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self.endpoint.list(context, params.as_ref()).into(), - header_map: self.header_map.clone(), - body: None, - } + self.request_builder + .get(self.endpoint.list(context, params.as_ref())) } pub fn filter_list( @@ -49,24 +39,13 @@ impl UsersRequest { params: &Option, // UniFFI doesn't support Option<&T> fields: &[SparseUserField], ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self - .endpoint - .filter_list(context, params.as_ref(), fields) - .into(), - header_map: self.header_map.clone(), - body: None, - } + self.request_builder + .get(self.endpoint.filter_list(context, params.as_ref(), fields)) } pub fn retrieve(&self, user_id: UserId, context: WPContext) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self.endpoint.retrieve(user_id, context).into(), - header_map: self.header_map.clone(), - body: None, - } + self.request_builder + .get(self.endpoint.retrieve(user_id, context)) } pub fn filter_retrieve( @@ -75,24 +54,12 @@ impl UsersRequest { context: WPContext, fields: &[SparseUserField], ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self - .endpoint - .filter_retrieve(user_id, context, fields) - .into(), - header_map: self.header_map.clone(), - body: None, - } + self.request_builder + .get(self.endpoint.filter_retrieve(user_id, context, fields)) } pub fn retrieve_me(&self, context: WPContext) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self.endpoint.retrieve_me(context).into(), - header_map: self.header_map.clone(), - body: None, - } + self.request_builder.get(self.endpoint.retrieve_me(context)) } pub fn filter_retrieve_me( @@ -100,56 +67,29 @@ impl UsersRequest { context: WPContext, fields: &[SparseUserField], ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self.endpoint.filter_retrieve_me(context, fields).into(), - header_map: self.header_map.clone(), - body: None, - } + self.request_builder + .get(self.endpoint.filter_retrieve_me(context, fields)) } pub fn create(&self, params: &UserCreateParams) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::POST, - url: self.endpoint.create().into(), - header_map: self.header_map_for_post_request.clone(), - body: serde_json::to_vec(¶ms).ok(), - } + self.request_builder.post(self.endpoint.create(), params) } pub fn update(&self, user_id: UserId, params: &UserUpdateParams) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::POST, - url: self.endpoint.update(user_id).into(), - header_map: self.header_map_for_post_request.clone(), - body: serde_json::to_vec(¶ms).ok(), - } + self.request_builder + .post(self.endpoint.update(user_id), params) } pub fn update_me(&self, params: &UserUpdateParams) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::POST, - url: self.endpoint.update_me().into(), - header_map: self.header_map_for_post_request.clone(), - body: serde_json::to_vec(¶ms).ok(), - } + self.request_builder.post(self.endpoint.update_me(), params) } pub fn delete(&self, user_id: UserId, params: &UserDeleteParams) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::DELETE, - url: self.endpoint.delete(user_id, params).into(), - header_map: self.header_map.clone(), - body: None, - } + self.request_builder + .delete(self.endpoint.delete(user_id, params)) } pub fn delete_me(&self, params: &UserDeleteParams) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::DELETE, - url: self.endpoint.delete_me(params).into(), - header_map: self.header_map.clone(), - body: None, - } + self.request_builder.delete(self.endpoint.delete_me(params)) } } From 08335bc10f37b6654afc9ff541c91e43a3527c78 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 24 May 2024 14:07:06 -0400 Subject: [PATCH 07/11] Use request builder in plugin request builder --- wp_api/src/lib.rs | 8 +-- wp_api/src/request/plugins_request.rs | 80 +++++++-------------------- 2 files changed, 20 insertions(+), 68 deletions(-) diff --git a/wp_api/src/lib.rs b/wp_api/src/lib.rs index a28d2dd51..5ce5bd3c6 100644 --- a/wp_api/src/lib.rs +++ b/wp_api/src/lib.rs @@ -29,7 +29,6 @@ const CONTENT_TYPE_JSON: &str = "application/json"; #[derive(Debug, uniffi::Object)] pub struct WPApiHelper { authentication: WPAuthentication, - request_builder: Arc, users_request: UsersRequest, plugins_request: PluginsRequest, } @@ -55,13 +54,8 @@ impl WPApiHelper { Self { authentication: authentication.clone(), - request_builder: request_builder.clone(), users_request: UsersRequest::new(api_base_url.clone(), request_builder.clone()), - plugins_request: PluginsRequest::new( - api_base_url.clone(), - header_map(&authentication), - header_map_for_post_request(&authentication), - ), + plugins_request: PluginsRequest::new(api_base_url.clone(), request_builder.clone()), } } diff --git a/wp_api/src/request/plugins_request.rs b/wp_api/src/request/plugins_request.rs index c7a3f3453..d4ff752cc 100644 --- a/wp_api/src/request/plugins_request.rs +++ b/wp_api/src/request/plugins_request.rs @@ -1,32 +1,26 @@ -use std::collections::HashMap; +use std::sync::Arc; use crate::{ - PluginCreateParams, PluginListParams, PluginSlug, PluginUpdateParams, SparsePluginField, - WPContext, + PluginCreateParams, PluginListParams, PluginSlug, PluginUpdateParams, RequestBuilder, + SparsePluginField, WPContext, }; use super::{ endpoint::{plugins_endpoint::PluginsEndpoint, ApiBaseUrl}, - RequestMethod, WPNetworkRequest, + WPNetworkRequest, }; #[derive(Debug)] pub(crate) struct PluginsRequest { endpoint: PluginsEndpoint, - header_map: HashMap, - header_map_for_post_request: HashMap, + request_builder: Arc, } impl PluginsRequest { - pub fn new( - api_base_url: ApiBaseUrl, - header_map: HashMap, - header_map_for_post_request: HashMap, - ) -> Self { + pub fn new(api_base_url: ApiBaseUrl, request_builder: Arc) -> Self { Self { endpoint: PluginsEndpoint::new(api_base_url), - header_map, - header_map_for_post_request, + request_builder, } } @@ -35,12 +29,8 @@ impl PluginsRequest { context: WPContext, params: &Option, // UniFFI doesn't support Option<&T> ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self.endpoint.list(context, params.as_ref()).into(), - header_map: self.header_map.clone(), - body: None, - } + self.request_builder + .get(self.endpoint.list(context, params.as_ref())) } pub fn filter_list( @@ -49,33 +39,17 @@ impl PluginsRequest { params: &Option, // UniFFI doesn't support Option<&T> fields: &[SparsePluginField], ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self - .endpoint - .filter_list(context, params.as_ref(), fields) - .into(), - header_map: self.header_map.clone(), - body: None, - } + self.request_builder + .get(self.endpoint.filter_list(context, params.as_ref(), fields)) } pub fn create(&self, params: &PluginCreateParams) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::POST, - url: self.endpoint.create().into(), - header_map: self.header_map_for_post_request.clone(), - body: serde_json::to_vec(¶ms).ok(), - } + self.request_builder.post(self.endpoint.create(), params) } pub fn retrieve(&self, context: WPContext, plugin: &PluginSlug) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self.endpoint.retrieve(context, plugin).into(), - header_map: self.header_map.clone(), - body: None, - } + self.request_builder + .get(self.endpoint.retrieve(context, plugin)) } pub fn filter_retrieve( @@ -84,32 +58,16 @@ impl PluginsRequest { plugin: &PluginSlug, fields: &[SparsePluginField], ) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: self - .endpoint - .filter_retrieve(context, plugin, fields) - .into(), - header_map: self.header_map.clone(), - body: None, - } + self.request_builder + .get(self.endpoint.filter_retrieve(context, plugin, fields)) } pub fn update(&self, plugin: &PluginSlug, params: &PluginUpdateParams) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::POST, - url: self.endpoint.update(plugin).into(), - header_map: self.header_map_for_post_request.clone(), - body: serde_json::to_vec(¶ms).ok(), - } + self.request_builder + .post(self.endpoint.update(plugin), params) } pub fn delete(&self, plugin: &PluginSlug) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::DELETE, - url: self.endpoint.delete(plugin).into(), - header_map: self.header_map.clone(), - body: None, - } + self.request_builder.delete(self.endpoint.delete(plugin)) } } From 6a0100768ee7b5ea67a28dd577cf6b4f79625288 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 24 May 2024 14:11:38 -0400 Subject: [PATCH 08/11] Convert ApiBaseUrl to Arc --- wp_api/src/lib.rs | 4 ++-- wp_api/src/request/endpoint.rs | 6 ++++-- wp_api/src/request/endpoint/plugins_endpoint.rs | 8 +++++--- wp_api/src/request/endpoint/users_endpoint.rs | 8 +++++--- wp_api/src/request/plugins_request.rs | 2 +- wp_api/src/request/users_request.rs | 2 +- 6 files changed, 18 insertions(+), 12 deletions(-) diff --git a/wp_api/src/lib.rs b/wp_api/src/lib.rs index 5ce5bd3c6..3c18a25dd 100644 --- a/wp_api/src/lib.rs +++ b/wp_api/src/lib.rs @@ -47,13 +47,13 @@ impl WPApiHelper { pub fn new(site_url: String, authentication: WPAuthentication) -> Self { let url = Url::parse(site_url.as_str()).unwrap(); // TODO: Handle the url parse error - let api_base_url = ApiBaseUrl::new(site_url.as_str()).unwrap(); + let api_base_url = Arc::new(ApiBaseUrl::new(site_url.as_str()).unwrap()); let request_builder = Arc::new(RequestBuilder { authentication: authentication.clone(), }); Self { - authentication: authentication.clone(), + authentication, users_request: UsersRequest::new(api_base_url.clone(), request_builder.clone()), plugins_request: PluginsRequest::new(api_base_url.clone(), request_builder.clone()), } diff --git a/wp_api/src/request/endpoint.rs b/wp_api/src/request/endpoint.rs index ff90b5c5b..0407cbeb5 100644 --- a/wp_api/src/request/endpoint.rs +++ b/wp_api/src/request/endpoint.rs @@ -120,6 +120,8 @@ impl UrlExtension for Url { #[cfg(test)] mod tests { + use std::sync::Arc; + use super::*; use rstest::*; @@ -174,8 +176,8 @@ mod tests { } #[fixture] - pub fn fixture_api_base_url() -> ApiBaseUrl { - ApiBaseUrl::new("https://example.com").unwrap() + pub fn fixture_api_base_url() -> Arc { + ApiBaseUrl::new("https://example.com").unwrap().into() } pub fn validate_endpoint(endpoint_url: ApiEndpointUrl, path: &str) { diff --git a/wp_api/src/request/endpoint/plugins_endpoint.rs b/wp_api/src/request/endpoint/plugins_endpoint.rs index be0be3eb4..6aa5b6300 100644 --- a/wp_api/src/request/endpoint/plugins_endpoint.rs +++ b/wp_api/src/request/endpoint/plugins_endpoint.rs @@ -1,3 +1,5 @@ +use std::sync::Arc; + use url::Url; use crate::{plugins::PluginListParams, PluginSlug, SparsePluginField, WPContext}; @@ -6,11 +8,11 @@ use super::{ApiBaseUrl, ApiEndpointUrl, UrlExtension}; #[derive(Debug)] pub(crate) struct PluginsEndpoint { - api_base_url: ApiBaseUrl, + api_base_url: Arc, } impl PluginsEndpoint { - pub fn new(api_base_url: ApiBaseUrl) -> Self { + pub fn new(api_base_url: Arc) -> Self { Self { api_base_url } } @@ -238,7 +240,7 @@ mod tests { } #[fixture] - fn plugins_endpoint(fixture_api_base_url: ApiBaseUrl) -> PluginsEndpoint { + fn plugins_endpoint(fixture_api_base_url: Arc) -> PluginsEndpoint { PluginsEndpoint::new(fixture_api_base_url) } } diff --git a/wp_api/src/request/endpoint/users_endpoint.rs b/wp_api/src/request/endpoint/users_endpoint.rs index 8d3ce2ee9..9d4c7acec 100644 --- a/wp_api/src/request/endpoint/users_endpoint.rs +++ b/wp_api/src/request/endpoint/users_endpoint.rs @@ -1,14 +1,16 @@ +use std::sync::Arc; + use crate::{SparseUserField, UserDeleteParams, UserId, UserListParams, WPContext}; use super::{ApiBaseUrl, ApiEndpointUrl, UrlExtension}; #[derive(Debug)] pub(crate) struct UsersEndpoint { - api_base_url: ApiBaseUrl, + api_base_url: Arc, } impl UsersEndpoint { - pub fn new(api_base_url: ApiBaseUrl) -> Self { + pub fn new(api_base_url: Arc) -> Self { Self { api_base_url } } @@ -240,7 +242,7 @@ mod tests { } #[fixture] - fn users_endpoint(fixture_api_base_url: ApiBaseUrl) -> UsersEndpoint { + fn users_endpoint(fixture_api_base_url: Arc) -> UsersEndpoint { UsersEndpoint::new(fixture_api_base_url) } } diff --git a/wp_api/src/request/plugins_request.rs b/wp_api/src/request/plugins_request.rs index d4ff752cc..ebf1aeff8 100644 --- a/wp_api/src/request/plugins_request.rs +++ b/wp_api/src/request/plugins_request.rs @@ -17,7 +17,7 @@ pub(crate) struct PluginsRequest { } impl PluginsRequest { - pub fn new(api_base_url: ApiBaseUrl, request_builder: Arc) -> Self { + pub fn new(api_base_url: Arc, request_builder: Arc) -> Self { Self { endpoint: PluginsEndpoint::new(api_base_url), request_builder, diff --git a/wp_api/src/request/users_request.rs b/wp_api/src/request/users_request.rs index d20c806ed..eed5288d8 100644 --- a/wp_api/src/request/users_request.rs +++ b/wp_api/src/request/users_request.rs @@ -17,7 +17,7 @@ pub(crate) struct UsersRequest { } impl UsersRequest { - pub fn new(api_base_url: ApiBaseUrl, request_builder: Arc) -> Self { + pub fn new(api_base_url: Arc, request_builder: Arc) -> Self { Self { endpoint: UsersEndpoint::new(api_base_url), request_builder, From a3f3944e49d0cad82d1d065cbb7757c81625ca4c Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 24 May 2024 14:45:38 -0400 Subject: [PATCH 09/11] Use request_builder for raw_request --- wp_api/src/lib.rs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/wp_api/src/lib.rs b/wp_api/src/lib.rs index 3c18a25dd..a0e52dc30 100644 --- a/wp_api/src/lib.rs +++ b/wp_api/src/lib.rs @@ -28,7 +28,7 @@ const CONTENT_TYPE_JSON: &str = "application/json"; #[derive(Debug, uniffi::Object)] pub struct WPApiHelper { - authentication: WPAuthentication, + request_builder: Arc, users_request: UsersRequest, plugins_request: PluginsRequest, } @@ -53,7 +53,7 @@ impl WPApiHelper { }); Self { - authentication, + request_builder: request_builder.clone(), users_request: UsersRequest::new(api_base_url.clone(), request_builder.clone()), plugins_request: PluginsRequest::new(api_base_url.clone(), request_builder.clone()), } @@ -61,12 +61,8 @@ impl WPApiHelper { // TODO: Remove this because we want to build all requests within the crate pub fn raw_request(&self, url: String) -> WPNetworkRequest { - WPNetworkRequest { - method: RequestMethod::GET, - url: ApiEndpointUrl::new(Url::parse(url.as_str()).unwrap()).into(), - header_map: header_map(&self.authentication), - body: None, - } + self.request_builder + .get(ApiEndpointUrl::new(Url::parse(url.as_str()).unwrap())) } pub fn list_users_request( From fe13c62a7c48072464ef7fe5ef10737a7f3a4d24 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 24 May 2024 14:56:42 -0400 Subject: [PATCH 10/11] Add Builder suffix to UsersRequest & PluginsRequest --- wp_api/src/lib.rs | 15 +++++++++------ wp_api/src/request.rs | 4 ++-- ...gins_request.rs => plugins_request_builder.rs} | 4 ++-- ...{users_request.rs => users_request_builder.rs} | 4 ++-- 4 files changed, 15 insertions(+), 12 deletions(-) rename wp_api/src/request/{plugins_request.rs => plugins_request_builder.rs} (96%) rename wp_api/src/request/{users_request.rs => users_request_builder.rs} (97%) diff --git a/wp_api/src/lib.rs b/wp_api/src/lib.rs index a0e52dc30..703ce6e7d 100644 --- a/wp_api/src/lib.rs +++ b/wp_api/src/lib.rs @@ -2,8 +2,8 @@ use request::{ endpoint::{ApiBaseUrl, ApiEndpointUrl}, - plugins_request::PluginsRequest, - users_request::UsersRequest, + plugins_request_builder::PluginsRequestBuilder, + users_request_builder::UsersRequestBuilder, RequestMethod, WPNetworkRequest, WPNetworkResponse, }; use serde::Serialize; @@ -29,8 +29,8 @@ const CONTENT_TYPE_JSON: &str = "application/json"; #[derive(Debug, uniffi::Object)] pub struct WPApiHelper { request_builder: Arc, - users_request: UsersRequest, - plugins_request: PluginsRequest, + users_request: UsersRequestBuilder, + plugins_request: PluginsRequestBuilder, } #[uniffi::export] @@ -54,8 +54,11 @@ impl WPApiHelper { Self { request_builder: request_builder.clone(), - users_request: UsersRequest::new(api_base_url.clone(), request_builder.clone()), - plugins_request: PluginsRequest::new(api_base_url.clone(), request_builder.clone()), + users_request: UsersRequestBuilder::new(api_base_url.clone(), request_builder.clone()), + plugins_request: PluginsRequestBuilder::new( + api_base_url.clone(), + request_builder.clone(), + ), } } diff --git a/wp_api/src/request.rs b/wp_api/src/request.rs index d9b69a09b..35c7ab522 100644 --- a/wp_api/src/request.rs +++ b/wp_api/src/request.rs @@ -8,8 +8,8 @@ use crate::WPApiError; use self::endpoint::WpEndpointUrl; pub mod endpoint; -pub mod plugins_request; -pub mod users_request; +pub mod plugins_request_builder; +pub mod users_request_builder; // Has custom `Debug` trait implementation #[derive(uniffi::Record)] diff --git a/wp_api/src/request/plugins_request.rs b/wp_api/src/request/plugins_request_builder.rs similarity index 96% rename from wp_api/src/request/plugins_request.rs rename to wp_api/src/request/plugins_request_builder.rs index ebf1aeff8..e974e8e39 100644 --- a/wp_api/src/request/plugins_request.rs +++ b/wp_api/src/request/plugins_request_builder.rs @@ -11,12 +11,12 @@ use super::{ }; #[derive(Debug)] -pub(crate) struct PluginsRequest { +pub(crate) struct PluginsRequestBuilder { endpoint: PluginsEndpoint, request_builder: Arc, } -impl PluginsRequest { +impl PluginsRequestBuilder { pub fn new(api_base_url: Arc, request_builder: Arc) -> Self { Self { endpoint: PluginsEndpoint::new(api_base_url), diff --git a/wp_api/src/request/users_request.rs b/wp_api/src/request/users_request_builder.rs similarity index 97% rename from wp_api/src/request/users_request.rs rename to wp_api/src/request/users_request_builder.rs index eed5288d8..b1a25eefa 100644 --- a/wp_api/src/request/users_request.rs +++ b/wp_api/src/request/users_request_builder.rs @@ -11,12 +11,12 @@ use super::{ }; #[derive(Debug)] -pub(crate) struct UsersRequest { +pub(crate) struct UsersRequestBuilder { endpoint: UsersEndpoint, request_builder: Arc, } -impl UsersRequest { +impl UsersRequestBuilder { pub fn new(api_base_url: Arc, request_builder: Arc) -> Self { Self { endpoint: UsersEndpoint::new(api_base_url), From ba44802753ccb206a63fd51ea668bd3bb514d2d0 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 24 May 2024 14:59:49 -0400 Subject: [PATCH 11/11] Move header map helpers inside RequestBuilder --- wp_api/src/lib.rs | 50 +++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/wp_api/src/lib.rs b/wp_api/src/lib.rs index 703ce6e7d..884b69ac8 100644 --- a/wp_api/src/lib.rs +++ b/wp_api/src/lib.rs @@ -200,7 +200,7 @@ impl RequestBuilder { WPNetworkRequest { method: RequestMethod::GET, url: url.into(), - header_map: header_map(&self.authentication), + header_map: self.header_map(), body: None, } } @@ -212,7 +212,7 @@ impl RequestBuilder { WPNetworkRequest { method: RequestMethod::POST, url: url.into(), - header_map: header_map_for_post_request(&self.authentication), + header_map: self.header_map_for_post_request(), body: serde_json::to_vec(json_body).ok(), } } @@ -221,34 +221,34 @@ impl RequestBuilder { WPNetworkRequest { method: RequestMethod::DELETE, url: url.into(), - header_map: header_map(&self.authentication), + header_map: self.header_map(), body: None, } } -} -fn header_map(authentication: &WPAuthentication) -> HashMap { - let mut header_map = HashMap::new(); - header_map.insert( - http::header::ACCEPT.to_string(), - CONTENT_TYPE_JSON.to_string(), - ); - match authentication { - WPAuthentication::None => None, - WPAuthentication::AuthorizationHeader { ref token } => { - header_map.insert("Authorization".to_string(), format!("Basic {}", token)) - } - }; - header_map -} + fn header_map(&self) -> HashMap { + let mut header_map = HashMap::new(); + header_map.insert( + http::header::ACCEPT.to_string(), + CONTENT_TYPE_JSON.to_string(), + ); + match self.authentication { + WPAuthentication::None => None, + WPAuthentication::AuthorizationHeader { ref token } => { + header_map.insert("Authorization".to_string(), format!("Basic {}", token)) + } + }; + header_map + } -fn header_map_for_post_request(authentication: &WPAuthentication) -> HashMap { - let mut header_map = header_map(authentication); - header_map.insert( - http::header::CONTENT_TYPE.to_string(), - CONTENT_TYPE_JSON.to_string(), - ); - header_map + fn header_map_for_post_request(&self) -> HashMap { + let mut header_map = self.header_map(); + header_map.insert( + http::header::CONTENT_TYPE.to_string(), + CONTENT_TYPE_JSON.to_string(), + ); + header_map + } } #[derive(Debug, Default, Clone, Copy, PartialEq, Eq, uniffi::Enum)]