From 7ba1a21058ba8a3be11d2755b541f31a91d70d3a Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 23 May 2024 18:19:31 -0400 Subject: [PATCH 1/5] Remove site_url from WPApiHelper fields --- wp_api/src/lib.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/wp_api/src/lib.rs b/wp_api/src/lib.rs index d0f7041a7..80c51e7b1 100644 --- a/wp_api/src/lib.rs +++ b/wp_api/src/lib.rs @@ -23,7 +23,6 @@ const CONTENT_TYPE_JSON: &str = "application/json"; #[derive(Debug, uniffi::Object)] pub struct WPApiHelper { api_endpoint: ApiEndpoint, - site_url: Url, authentication: WPAuthentication, } @@ -45,7 +44,6 @@ impl WPApiHelper { Self { api_endpoint, - site_url: url, authentication, } } From ca9e960a783fdfe219495845e30dbcf660a32026 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 23 May 2024 19:14:30 -0400 Subject: [PATCH 2/5] Adds ApiEndpointUrl --- wp_api/src/lib.rs | 45 ++++++++------ wp_api/src/request.rs | 4 +- wp_api/src/request/endpoint.rs | 34 +++++++++- .../src/request/endpoint/plugins_endpoint.rs | 38 +++++++----- wp_api/src/request/endpoint/users_endpoint.rs | 62 +++++++++++-------- 5 files changed, 119 insertions(+), 64 deletions(-) diff --git a/wp_api/src/lib.rs b/wp_api/src/lib.rs index 80c51e7b1..bd8e743f4 100644 --- a/wp_api/src/lib.rs +++ b/wp_api/src/lib.rs @@ -48,6 +48,7 @@ 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, @@ -68,7 +69,7 @@ impl WPApiHelper { .api_endpoint .users .list(context, params.as_ref()) - .into(), + .as_string(), header_map: self.header_map(), body: None, } @@ -86,7 +87,7 @@ impl WPApiHelper { .api_endpoint .users .filter_list(context, params.as_ref(), fields) - .into(), + .as_string(), header_map: self.header_map(), body: None, } @@ -95,7 +96,11 @@ impl WPApiHelper { pub fn retrieve_user_request(&self, user_id: UserId, context: WPContext) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, - url: self.api_endpoint.users.retrieve(user_id, context).into(), + url: self + .api_endpoint + .users + .retrieve(user_id, context) + .as_string(), header_map: self.header_map(), body: None, } @@ -113,7 +118,7 @@ impl WPApiHelper { .api_endpoint .users .filter_retrieve(user_id, context, fields) - .into(), + .as_string(), header_map: self.header_map(), body: None, } @@ -122,7 +127,7 @@ impl WPApiHelper { pub fn retrieve_current_user_request(&self, context: WPContext) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, - url: self.api_endpoint.users.retrieve_me(context).into(), + url: self.api_endpoint.users.retrieve_me(context).as_string(), header_map: self.header_map(), body: None, } @@ -139,7 +144,7 @@ impl WPApiHelper { .api_endpoint .users .filter_retrieve_me(context, fields) - .into(), + .as_string(), header_map: self.header_map(), body: None, } @@ -148,7 +153,7 @@ impl WPApiHelper { pub fn create_user_request(&self, params: &UserCreateParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, - url: self.api_endpoint.users.create().into(), + url: self.api_endpoint.users.create().as_string(), header_map: self.header_map_for_post_request(), body: serde_json::to_vec(¶ms).ok(), } @@ -161,7 +166,7 @@ impl WPApiHelper { ) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, - url: self.api_endpoint.users.update(user_id).into(), + url: self.api_endpoint.users.update(user_id).as_string(), header_map: self.header_map_for_post_request(), body: serde_json::to_vec(¶ms).ok(), } @@ -170,7 +175,7 @@ impl WPApiHelper { pub fn update_current_user_request(&self, params: &UserUpdateParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, - url: self.api_endpoint.users.update_me().into(), + url: self.api_endpoint.users.update_me().as_string(), header_map: self.header_map_for_post_request(), body: serde_json::to_vec(¶ms).ok(), } @@ -183,7 +188,7 @@ impl WPApiHelper { ) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::DELETE, - url: self.api_endpoint.users.delete(user_id, params).into(), + url: self.api_endpoint.users.delete(user_id, params).as_string(), header_map: self.header_map(), body: None, } @@ -192,7 +197,7 @@ impl WPApiHelper { pub fn delete_current_user_request(&self, params: &UserDeleteParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::DELETE, - url: self.api_endpoint.users.delete_me(params).into(), + url: self.api_endpoint.users.delete_me(params).as_string(), header_map: self.header_map(), body: None, } @@ -209,7 +214,7 @@ impl WPApiHelper { .api_endpoint .plugins .list(context, params.as_ref()) - .into(), + .as_string(), header_map: self.header_map(), body: None, } @@ -227,7 +232,7 @@ impl WPApiHelper { .api_endpoint .plugins .filter_list(context, params.as_ref(), fields) - .into(), + .as_string(), header_map: self.header_map(), body: None, } @@ -236,7 +241,7 @@ impl WPApiHelper { pub fn create_plugin_request(&self, params: &PluginCreateParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, - url: self.api_endpoint.plugins.create().into(), + url: self.api_endpoint.plugins.create().as_string(), header_map: self.header_map_for_post_request(), body: serde_json::to_vec(¶ms).ok(), } @@ -249,7 +254,11 @@ impl WPApiHelper { ) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, - url: self.api_endpoint.plugins.retrieve(context, plugin).into(), + url: self + .api_endpoint + .plugins + .retrieve(context, plugin) + .as_string(), header_map: self.header_map(), body: None, } @@ -267,7 +276,7 @@ impl WPApiHelper { .api_endpoint .plugins .filter_retrieve(context, plugin, fields) - .into(), + .as_string(), header_map: self.header_map(), body: None, } @@ -280,7 +289,7 @@ impl WPApiHelper { ) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, - url: self.api_endpoint.plugins.update(plugin).into(), + url: self.api_endpoint.plugins.update(plugin).as_string(), header_map: self.header_map_for_post_request(), body: serde_json::to_vec(¶ms).ok(), } @@ -289,7 +298,7 @@ impl WPApiHelper { pub fn delete_plugin_request(&self, plugin: &PluginSlug) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::DELETE, - url: self.api_endpoint.plugins.delete(plugin).into(), + url: self.api_endpoint.plugins.delete(plugin).as_string(), header_map: self.header_map(), body: None, } diff --git a/wp_api/src/request.rs b/wp_api/src/request.rs index e0a34d450..f8ac068c5 100644 --- a/wp_api/src/request.rs +++ b/wp_api/src/request.rs @@ -33,7 +33,7 @@ impl Debug for WPNetworkRequest { indoc::indoc! {" WPNetworkRequest {{ method: '{:?}', - url: '{}', + url: '{:?}', header_map: '{:?}', body: '{:?}' }} @@ -137,7 +137,7 @@ impl Debug for WPNetworkResponse { } } -#[derive(Debug, uniffi::Enum)] +#[derive(Debug, Clone, uniffi::Enum)] pub enum RequestMethod { GET, POST, diff --git a/wp_api/src/request/endpoint.rs b/wp_api/src/request/endpoint.rs index b9b71b16d..5e8159793 100644 --- a/wp_api/src/request/endpoint.rs +++ b/wp_api/src/request/endpoint.rs @@ -10,6 +10,34 @@ mod users_endpoint; const WP_JSON_PATH_SEGMENTS: [&str; 3] = ["wp-json", "wp", "v2"]; +#[derive(Debug, uniffi::Object)] +pub struct ApiEndpointUrl { + url: Url, +} + +impl ApiEndpointUrl { + fn new(url: Url) -> Self { + Self { url } + } + + fn url(&self) -> &Url { + &self.url + } +} + +#[uniffi::export] +impl ApiEndpointUrl { + pub fn as_string(&self) -> String { + self.url.clone().into() + } +} + +impl From for ApiEndpointUrl { + fn from(url: Url) -> Self { + Self::new(url) + } +} + #[derive(Debug, Clone)] pub struct ApiBaseUrl { url: Url, @@ -49,7 +77,7 @@ impl ApiBaseUrl { } #[derive(Debug)] -pub struct ApiEndpoint { +pub(crate) struct ApiEndpoint { pub base_url: ApiBaseUrl, pub users: UsersEndpoint, pub plugins: PluginsEndpoint, @@ -167,9 +195,9 @@ mod tests { ApiBaseUrl::new("https://example.com").unwrap() } - pub fn validate_endpoint(endpoint_url: Url, path: &str) { + pub fn validate_endpoint(endpoint_url: ApiEndpointUrl, path: &str) { assert_eq!( - endpoint_url.as_str(), + endpoint_url.as_string(), format!("{}{}", fixture_api_base_url().as_str(), path) ); } diff --git a/wp_api/src/request/endpoint/plugins_endpoint.rs b/wp_api/src/request/endpoint/plugins_endpoint.rs index a49947178..20e6f51ab 100644 --- a/wp_api/src/request/endpoint/plugins_endpoint.rs +++ b/wp_api/src/request/endpoint/plugins_endpoint.rs @@ -2,10 +2,10 @@ use url::Url; use crate::{plugins::PluginListParams, PluginSlug, SparsePluginField, WPContext}; -use super::{ApiBaseUrl, UrlExtension}; +use super::{ApiBaseUrl, ApiEndpointUrl, UrlExtension}; #[derive(Debug)] -pub struct PluginsEndpoint { +pub(crate) struct PluginsEndpoint { api_base_url: ApiBaseUrl, } @@ -14,22 +14,22 @@ impl PluginsEndpoint { Self { api_base_url } } - pub fn create(&self) -> Url { - self.plugins_base_url() + pub fn create(&self) -> ApiEndpointUrl { + self.plugins_base_url().into() } - pub fn delete(&self, plugin: &PluginSlug) -> Url { - self.plugins_url_with_slug(plugin) + pub fn delete(&self, plugin: &PluginSlug) -> ApiEndpointUrl { + self.plugins_url_with_slug(plugin).into() } - pub fn list(&self, context: WPContext, params: Option<&PluginListParams>) -> Url { + pub fn list(&self, context: WPContext, params: Option<&PluginListParams>) -> ApiEndpointUrl { let mut url = self.plugins_base_url(); url.query_pairs_mut() .append_pair("context", context.as_str()); if let Some(params) = params { url.query_pairs_mut().extend_pairs(params.query_pairs()); } - url + url.into() } pub fn filter_list( @@ -37,15 +37,18 @@ impl PluginsEndpoint { context: WPContext, params: Option<&PluginListParams>, fields: &[SparsePluginField], - ) -> Url { - self.list(context, params).append_filter_fields(fields) + ) -> ApiEndpointUrl { + self.list(context, params) + .url + .append_filter_fields(fields) + .into() } - pub fn retrieve(&self, context: WPContext, plugin: &PluginSlug) -> Url { + pub fn retrieve(&self, context: WPContext, plugin: &PluginSlug) -> ApiEndpointUrl { let mut url = self.plugins_url_with_slug(plugin); url.query_pairs_mut() .append_pair("context", context.as_str()); - url + url.into() } pub fn filter_retrieve( @@ -53,12 +56,15 @@ impl PluginsEndpoint { context: WPContext, plugin: &PluginSlug, fields: &[SparsePluginField], - ) -> Url { - self.retrieve(context, plugin).append_filter_fields(fields) + ) -> ApiEndpointUrl { + self.retrieve(context, plugin) + .url + .append_filter_fields(fields) + .into() } - pub fn update(&self, plugin: &PluginSlug) -> Url { - self.plugins_url_with_slug(plugin) + pub fn update(&self, plugin: &PluginSlug) -> ApiEndpointUrl { + self.plugins_url_with_slug(plugin).into() } fn plugins_base_url(&self) -> Url { diff --git a/wp_api/src/request/endpoint/users_endpoint.rs b/wp_api/src/request/endpoint/users_endpoint.rs index 01b527dc0..e6ed0a7d3 100644 --- a/wp_api/src/request/endpoint/users_endpoint.rs +++ b/wp_api/src/request/endpoint/users_endpoint.rs @@ -1,11 +1,9 @@ -use url::Url; - use crate::{SparseUserField, UserDeleteParams, UserId, UserListParams, WPContext}; -use super::{ApiBaseUrl, UrlExtension}; +use super::{ApiBaseUrl, ApiEndpointUrl, UrlExtension}; #[derive(Debug)] -pub struct UsersEndpoint { +pub(crate) struct UsersEndpoint { api_base_url: ApiBaseUrl, } @@ -14,32 +12,32 @@ impl UsersEndpoint { Self { api_base_url } } - pub fn create(&self) -> Url { - self.api_base_url.by_appending("users") + pub fn create(&self) -> ApiEndpointUrl { + self.api_base_url.by_appending("users").into() } - pub fn delete(&self, user_id: UserId, params: &UserDeleteParams) -> Url { + pub fn delete(&self, user_id: UserId, params: &UserDeleteParams) -> ApiEndpointUrl { let mut url = self .api_base_url .by_extending(["users", &user_id.to_string()]); url.query_pairs_mut().extend_pairs(params.query_pairs()); - url + url.into() } - pub fn delete_me(&self, params: &UserDeleteParams) -> Url { + pub fn delete_me(&self, params: &UserDeleteParams) -> ApiEndpointUrl { let mut url = self.api_base_url.by_extending(["users", "me"]); url.query_pairs_mut().extend_pairs(params.query_pairs()); - url + url.into() } - pub fn list(&self, context: WPContext, params: Option<&UserListParams>) -> Url { + pub fn list(&self, context: WPContext, params: Option<&UserListParams>) -> ApiEndpointUrl { let mut url = self.api_base_url.by_appending("users"); url.query_pairs_mut() .append_pair("context", context.as_str()); if let Some(params) = params { url.query_pairs_mut().extend_pairs(params.query_pairs()); } - url + url.into() } pub fn filter_list( @@ -47,17 +45,20 @@ impl UsersEndpoint { context: WPContext, params: Option<&UserListParams>, fields: &[SparseUserField], - ) -> Url { - self.list(context, params).append_filter_fields(fields) + ) -> ApiEndpointUrl { + self.list(context, params) + .url + .append_filter_fields(fields) + .into() } - pub fn retrieve(&self, user_id: UserId, context: WPContext) -> Url { + pub fn retrieve(&self, user_id: UserId, context: WPContext) -> ApiEndpointUrl { let mut url = self .api_base_url .by_extending(["users", &user_id.to_string()]); url.query_pairs_mut() .append_pair("context", context.as_str()); - url + url.into() } pub fn filter_retrieve( @@ -65,28 +66,39 @@ impl UsersEndpoint { user_id: UserId, context: WPContext, fields: &[SparseUserField], - ) -> Url { - self.retrieve(user_id, context).append_filter_fields(fields) + ) -> ApiEndpointUrl { + self.retrieve(user_id, context) + .url + .append_filter_fields(fields) + .into() } - pub fn retrieve_me(&self, context: WPContext) -> Url { + pub fn retrieve_me(&self, context: WPContext) -> ApiEndpointUrl { let mut url = self.api_base_url.by_extending(["users", "me"]); url.query_pairs_mut() .append_pair("context", context.as_str()); - url + url.into() } - pub fn filter_retrieve_me(&self, context: WPContext, fields: &[SparseUserField]) -> Url { - self.retrieve_me(context).append_filter_fields(fields) + pub fn filter_retrieve_me( + &self, + context: WPContext, + fields: &[SparseUserField], + ) -> ApiEndpointUrl { + self.retrieve_me(context) + .url + .append_filter_fields(fields) + .into() } - pub fn update(&self, user_id: UserId) -> Url { + pub fn update(&self, user_id: UserId) -> ApiEndpointUrl { self.api_base_url .by_extending(["users", &user_id.to_string()]) + .into() } - pub fn update_me(&self) -> Url { - self.api_base_url.by_extending(["users", "me"]) + pub fn update_me(&self) -> ApiEndpointUrl { + self.api_base_url.by_extending(["users", "me"]).into() } } From ac42c09fdc93ab56900f1202ef30eb537f86ce5d Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 23 May 2024 19:49:21 -0400 Subject: [PATCH 3/5] Adds ApiEndpointUrlResult --- wp_api/src/lib.rs | 51 +++++++++++++++------------------- wp_api/src/request.rs | 4 ++- wp_api/src/request/endpoint.rs | 14 ++++++++-- 3 files changed, 38 insertions(+), 31 deletions(-) diff --git a/wp_api/src/lib.rs b/wp_api/src/lib.rs index bd8e743f4..cd6dc5196 100644 --- a/wp_api/src/lib.rs +++ b/wp_api/src/lib.rs @@ -1,6 +1,9 @@ #![allow(dead_code, unused_variables)] -use request::{endpoint::ApiEndpoint, RequestMethod, WPNetworkRequest, WPNetworkResponse}; +use request::{ + endpoint::{ApiEndpoint, ApiEndpointUrl}, + RequestMethod, WPNetworkRequest, WPNetworkResponse, +}; use std::collections::HashMap; use url::Url; @@ -52,7 +55,7 @@ impl WPApiHelper { pub fn raw_request(&self, url: String) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, - url: Url::parse(url.as_str()).unwrap().into(), + url: ApiEndpointUrl::new(Url::parse(url.as_str()).unwrap()).into(), header_map: self.header_map(), body: None, } @@ -69,7 +72,7 @@ impl WPApiHelper { .api_endpoint .users .list(context, params.as_ref()) - .as_string(), + .into(), header_map: self.header_map(), body: None, } @@ -87,7 +90,7 @@ impl WPApiHelper { .api_endpoint .users .filter_list(context, params.as_ref(), fields) - .as_string(), + .into(), header_map: self.header_map(), body: None, } @@ -96,11 +99,7 @@ impl WPApiHelper { pub fn retrieve_user_request(&self, user_id: UserId, context: WPContext) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, - url: self - .api_endpoint - .users - .retrieve(user_id, context) - .as_string(), + url: self.api_endpoint.users.retrieve(user_id, context).into(), header_map: self.header_map(), body: None, } @@ -118,7 +117,7 @@ impl WPApiHelper { .api_endpoint .users .filter_retrieve(user_id, context, fields) - .as_string(), + .into(), header_map: self.header_map(), body: None, } @@ -127,7 +126,7 @@ impl WPApiHelper { pub fn retrieve_current_user_request(&self, context: WPContext) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, - url: self.api_endpoint.users.retrieve_me(context).as_string(), + url: self.api_endpoint.users.retrieve_me(context).into(), header_map: self.header_map(), body: None, } @@ -144,7 +143,7 @@ impl WPApiHelper { .api_endpoint .users .filter_retrieve_me(context, fields) - .as_string(), + .into(), header_map: self.header_map(), body: None, } @@ -153,7 +152,7 @@ impl WPApiHelper { pub fn create_user_request(&self, params: &UserCreateParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, - url: self.api_endpoint.users.create().as_string(), + url: self.api_endpoint.users.create().into(), header_map: self.header_map_for_post_request(), body: serde_json::to_vec(¶ms).ok(), } @@ -166,7 +165,7 @@ impl WPApiHelper { ) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, - url: self.api_endpoint.users.update(user_id).as_string(), + url: self.api_endpoint.users.update(user_id).into(), header_map: self.header_map_for_post_request(), body: serde_json::to_vec(¶ms).ok(), } @@ -175,7 +174,7 @@ impl WPApiHelper { pub fn update_current_user_request(&self, params: &UserUpdateParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, - url: self.api_endpoint.users.update_me().as_string(), + url: self.api_endpoint.users.update_me().into(), header_map: self.header_map_for_post_request(), body: serde_json::to_vec(¶ms).ok(), } @@ -188,7 +187,7 @@ impl WPApiHelper { ) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::DELETE, - url: self.api_endpoint.users.delete(user_id, params).as_string(), + url: self.api_endpoint.users.delete(user_id, params).into(), header_map: self.header_map(), body: None, } @@ -197,7 +196,7 @@ impl WPApiHelper { pub fn delete_current_user_request(&self, params: &UserDeleteParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::DELETE, - url: self.api_endpoint.users.delete_me(params).as_string(), + url: self.api_endpoint.users.delete_me(params).into(), header_map: self.header_map(), body: None, } @@ -214,7 +213,7 @@ impl WPApiHelper { .api_endpoint .plugins .list(context, params.as_ref()) - .as_string(), + .into(), header_map: self.header_map(), body: None, } @@ -232,7 +231,7 @@ impl WPApiHelper { .api_endpoint .plugins .filter_list(context, params.as_ref(), fields) - .as_string(), + .into(), header_map: self.header_map(), body: None, } @@ -241,7 +240,7 @@ impl WPApiHelper { pub fn create_plugin_request(&self, params: &PluginCreateParams) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, - url: self.api_endpoint.plugins.create().as_string(), + url: self.api_endpoint.plugins.create().into(), header_map: self.header_map_for_post_request(), body: serde_json::to_vec(¶ms).ok(), } @@ -254,11 +253,7 @@ impl WPApiHelper { ) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::GET, - url: self - .api_endpoint - .plugins - .retrieve(context, plugin) - .as_string(), + url: self.api_endpoint.plugins.retrieve(context, plugin).into(), header_map: self.header_map(), body: None, } @@ -276,7 +271,7 @@ impl WPApiHelper { .api_endpoint .plugins .filter_retrieve(context, plugin, fields) - .as_string(), + .into(), header_map: self.header_map(), body: None, } @@ -289,7 +284,7 @@ impl WPApiHelper { ) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::POST, - url: self.api_endpoint.plugins.update(plugin).as_string(), + url: self.api_endpoint.plugins.update(plugin).into(), header_map: self.header_map_for_post_request(), body: serde_json::to_vec(¶ms).ok(), } @@ -298,7 +293,7 @@ impl WPApiHelper { pub fn delete_plugin_request(&self, plugin: &PluginSlug) -> WPNetworkRequest { WPNetworkRequest { method: RequestMethod::DELETE, - url: self.api_endpoint.plugins.delete(plugin).as_string(), + url: self.api_endpoint.plugins.delete(plugin).into(), header_map: self.header_map(), body: None, } diff --git a/wp_api/src/request.rs b/wp_api/src/request.rs index f8ac068c5..9c4948cd1 100644 --- a/wp_api/src/request.rs +++ b/wp_api/src/request.rs @@ -5,13 +5,15 @@ use url::Url; use crate::WPApiError; +use self::endpoint::ApiEndpointUrlResult; + pub mod endpoint; // Has custom `Debug` trait implementation #[derive(uniffi::Record)] pub struct WPNetworkRequest { pub method: RequestMethod, - pub url: String, + pub url: ApiEndpointUrlResult, // TODO: We probably want to implement a specific type for these headers instead of using a // regular HashMap. // diff --git a/wp_api/src/request/endpoint.rs b/wp_api/src/request/endpoint.rs index 5e8159793..a16a16623 100644 --- a/wp_api/src/request/endpoint.rs +++ b/wp_api/src/request/endpoint.rs @@ -10,13 +10,17 @@ mod users_endpoint; const WP_JSON_PATH_SEGMENTS: [&str; 3] = ["wp-json", "wp", "v2"]; +uniffi::custom_newtype!(ApiEndpointUrlResult, String); +#[derive(Debug)] +pub struct ApiEndpointUrlResult(String); + #[derive(Debug, uniffi::Object)] -pub struct ApiEndpointUrl { +pub(crate) struct ApiEndpointUrl { url: Url, } impl ApiEndpointUrl { - fn new(url: Url) -> Self { + pub fn new(url: Url) -> Self { Self { url } } @@ -38,6 +42,12 @@ impl From for ApiEndpointUrl { } } +impl From for ApiEndpointUrlResult { + fn from(value: ApiEndpointUrl) -> Self { + Self(value.as_string()) + } +} + #[derive(Debug, Clone)] pub struct ApiBaseUrl { url: Url, From 07d28356c7a9c5ca4e566e3f04339fc7816249d7 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 23 May 2024 20:08:32 -0400 Subject: [PATCH 4/5] Rename ApiEndpointUrlResult as WpEndpointUrl --- wp_api/src/request.rs | 4 ++-- wp_api/src/request/endpoint.rs | 21 +++++++++------------ wp_api/tests/integration_test_common.rs | 2 +- wp_api/tests/test_users_err.rs | 5 +++-- 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/wp_api/src/request.rs b/wp_api/src/request.rs index 9c4948cd1..9132e940d 100644 --- a/wp_api/src/request.rs +++ b/wp_api/src/request.rs @@ -5,7 +5,7 @@ use url::Url; use crate::WPApiError; -use self::endpoint::ApiEndpointUrlResult; +use self::endpoint::WpEndpointUrl; pub mod endpoint; @@ -13,7 +13,7 @@ pub mod endpoint; #[derive(uniffi::Record)] pub struct WPNetworkRequest { pub method: RequestMethod, - pub url: ApiEndpointUrlResult, + pub url: WpEndpointUrl, // TODO: We probably want to implement a specific type for these headers instead of using a // regular HashMap. // diff --git a/wp_api/src/request/endpoint.rs b/wp_api/src/request/endpoint.rs index a16a16623..0411cf662 100644 --- a/wp_api/src/request/endpoint.rs +++ b/wp_api/src/request/endpoint.rs @@ -10,11 +10,11 @@ mod users_endpoint; const WP_JSON_PATH_SEGMENTS: [&str; 3] = ["wp-json", "wp", "v2"]; -uniffi::custom_newtype!(ApiEndpointUrlResult, String); +uniffi::custom_newtype!(WpEndpointUrl, String); #[derive(Debug)] -pub struct ApiEndpointUrlResult(String); +pub struct WpEndpointUrl(pub String); -#[derive(Debug, uniffi::Object)] +#[derive(Debug)] pub(crate) struct ApiEndpointUrl { url: Url, } @@ -27,12 +27,9 @@ impl ApiEndpointUrl { fn url(&self) -> &Url { &self.url } -} -#[uniffi::export] -impl ApiEndpointUrl { - pub fn as_string(&self) -> String { - self.url.clone().into() + pub fn as_str(&self) -> &str { + self.url.as_str() } } @@ -42,9 +39,9 @@ impl From for ApiEndpointUrl { } } -impl From for ApiEndpointUrlResult { - fn from(value: ApiEndpointUrl) -> Self { - Self(value.as_string()) +impl From for WpEndpointUrl { + fn from(url: ApiEndpointUrl) -> Self { + Self(url.as_str().to_string()) } } @@ -207,7 +204,7 @@ mod tests { pub fn validate_endpoint(endpoint_url: ApiEndpointUrl, path: &str) { assert_eq!( - endpoint_url.as_string(), + endpoint_url.as_str(), format!("{}{}", fixture_api_base_url().as_str(), path) ); } diff --git a/wp_api/tests/integration_test_common.rs b/wp_api/tests/integration_test_common.rs index 68738a98d..f25a34fbb 100644 --- a/wp_api/tests/integration_test_common.rs +++ b/wp_api/tests/integration_test_common.rs @@ -185,7 +185,7 @@ impl AsyncWPNetworking { let mut request = self .client - .request(Self::request_method(wp_request.method), wp_request.url) + .request(Self::request_method(wp_request.method), wp_request.url.0) .headers(request_headers); if let Some(body) = wp_request.body { request = request.body(body); diff --git a/wp_api/tests/test_users_err.rs b/wp_api/tests/test_users_err.rs index b063ea381..dbec0a757 100644 --- a/wp_api/tests/test_users_err.rs +++ b/wp_api/tests/test_users_err.rs @@ -1,5 +1,6 @@ use integration_test_common::SECOND_USER_EMAIL; use wp_api::{ + request::endpoint::WpEndpointUrl, users::{ UserCreateParams, UserDeleteParams, UserId, UserListParams, UserUpdateParams, WPApiParamUsersOrderBy, WPApiParamUsersWho, @@ -317,7 +318,7 @@ async fn update_user_err_user_invalid_slug() { #[tokio::test] async fn create_user_err_user_exists() { let mut request = api().create_user_request(&valid_user_create_params()); - request.url.push_str("?id=1"); + request.url.0.push_str("?id=1"); request .execute() .await @@ -334,7 +335,7 @@ async fn delete_user_err_trash_not_supported() { reassign: SECOND_USER_ID, }, ); - request.url = request.url.replace("&force=true", ""); + request.url = WpEndpointUrl(request.url.0.replace("&force=true", "")); request .execute() .await From e20302ee20367430e15e94f0de59b709dfcc42c5 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 23 May 2024 20:39:59 -0400 Subject: [PATCH 5/5] Mark ApiBaseUrl as pub(crate) --- wp_api/src/request/endpoint.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wp_api/src/request/endpoint.rs b/wp_api/src/request/endpoint.rs index 0411cf662..c670b0f06 100644 --- a/wp_api/src/request/endpoint.rs +++ b/wp_api/src/request/endpoint.rs @@ -46,7 +46,7 @@ impl From for WpEndpointUrl { } #[derive(Debug, Clone)] -pub struct ApiBaseUrl { +pub(crate) struct ApiBaseUrl { url: Url, }