From b16ba277f0ad49158a15231254466be0a20c4e02 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 23 May 2024 13:48:22 -0400 Subject: [PATCH 1/2] Move WPNetworkRequest & WPNetworkRequest to request module --- wp_api/src/lib.rs | 46 +---------------------- wp_api/src/request.rs | 49 +++++++++++++++++++++++++ wp_api/tests/integration_test_common.rs | 5 ++- 3 files changed, 54 insertions(+), 46 deletions(-) create mode 100644 wp_api/src/request.rs diff --git a/wp_api/src/lib.rs b/wp_api/src/lib.rs index 6fa002794..7d98eb261 100644 --- a/wp_api/src/lib.rs +++ b/wp_api/src/lib.rs @@ -1,5 +1,6 @@ #![allow(dead_code, unused_variables)] +use request::{WPNetworkRequest, WPNetworkResponse}; use serde::Deserialize; use std::collections::HashMap; use url::Url; @@ -14,6 +15,7 @@ mod api_error; // re-exported relevant types pub mod endpoint; pub mod login; pub mod plugins; +pub mod request; pub mod users; #[cfg(test)] @@ -391,50 +393,6 @@ impl WPApiParamOrder { } } -#[derive(uniffi::Record)] -pub struct WPNetworkRequest { - pub method: RequestMethod, - pub url: String, - // TODO: We probably want to implement a specific type for these headers instead of using a - // regular HashMap. - // - // It could be something similar to `reqwest`'s [`header`](https://docs.rs/reqwest/latest/reqwest/header/index.html) - // module. - pub header_map: HashMap, - pub body: Option>, -} - -#[derive(uniffi::Record)] -pub struct WPNetworkResponse { - pub body: Vec, - pub status_code: u16, - // TODO: We probably want to implement a specific type for these headers instead of using a - // regular HashMap. - // - // It could be something similar to `reqwest`'s [`header`](https://docs.rs/reqwest/latest/reqwest/header/index.html) - // module. - pub header_map: Option>, -} - -impl WPNetworkResponse { - pub fn get_link_header(&self, name: &str) -> Option { - if let Some(headers) = self.header_map.clone() { - // TODO: This is inefficient - if headers.contains_key("Link") { - if let Ok(res) = parse_link_header::parse_with_rel(&headers["Link"]) { - if let Some(next) = res.get(name) { - if let Ok(url) = Url::parse(next.raw_uri.as_str()) { - return Some(url); - } - } - } - } - } - - None - } -} - #[uniffi::export] pub fn parse_api_details_response(response: WPNetworkResponse) -> Result { let api_details = diff --git a/wp_api/src/request.rs b/wp_api/src/request.rs new file mode 100644 index 000000000..5b4c2b1a5 --- /dev/null +++ b/wp_api/src/request.rs @@ -0,0 +1,49 @@ +use std::collections::HashMap; + +use url::Url; + +use crate::RequestMethod; + +#[derive(uniffi::Record)] +pub struct WPNetworkRequest { + pub method: RequestMethod, + pub url: String, + // TODO: We probably want to implement a specific type for these headers instead of using a + // regular HashMap. + // + // It could be something similar to `reqwest`'s [`header`](https://docs.rs/reqwest/latest/reqwest/header/index.html) + // module. + pub header_map: HashMap, + pub body: Option>, +} + +#[derive(uniffi::Record)] +pub struct WPNetworkResponse { + pub body: Vec, + pub status_code: u16, + // TODO: We probably want to implement a specific type for these headers instead of using a + // regular HashMap. + // + // It could be something similar to `reqwest`'s [`header`](https://docs.rs/reqwest/latest/reqwest/header/index.html) + // module. + pub header_map: Option>, +} + +impl WPNetworkResponse { + pub fn get_link_header(&self, name: &str) -> Option { + if let Some(headers) = self.header_map.clone() { + // TODO: This is inefficient + if headers.contains_key("Link") { + if let Ok(res) = parse_link_header::parse_with_rel(&headers["Link"]) { + if let Some(next) = res.get(name) { + if let Ok(url) = Url::parse(next.raw_uri.as_str()) { + return Some(url); + } + } + } + } + } + + None + } +} diff --git a/wp_api/tests/integration_test_common.rs b/wp_api/tests/integration_test_common.rs index 26145a0da..afd011b7a 100644 --- a/wp_api/tests/integration_test_common.rs +++ b/wp_api/tests/integration_test_common.rs @@ -2,8 +2,9 @@ use futures::Future; use http::HeaderMap; use std::{fs::read_to_string, process::Command}; use wp_api::{ - users::UserId, WPApiError, WPApiHelper, WPAuthentication, WPNetworkRequest, WPNetworkResponse, - WPRestError, WPRestErrorCode, WPRestErrorWrapper, + request::{WPNetworkRequest, WPNetworkResponse}, + users::UserId, + WPApiError, WPApiHelper, WPAuthentication, WPRestError, WPRestErrorCode, WPRestErrorWrapper, }; // The first user is also the current user From 968987f6068042fa71b62bde90f9a40880b9baf2 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 23 May 2024 13:56:50 -0400 Subject: [PATCH 2/2] Move endpoint module under request module --- wp_api/src/lib.rs | 4 +--- wp_api/src/request.rs | 2 ++ wp_api/src/{ => request}/endpoint.rs | 0 wp_api/src/{ => request}/endpoint/plugins_endpoint.rs | 9 +++++---- wp_api/src/{ => request}/endpoint/users_endpoint.rs | 6 +++--- 5 files changed, 11 insertions(+), 10 deletions(-) rename wp_api/src/{ => request}/endpoint.rs (100%) rename wp_api/src/{ => request}/endpoint/plugins_endpoint.rs (96%) rename wp_api/src/{ => request}/endpoint/users_endpoint.rs (97%) diff --git a/wp_api/src/lib.rs b/wp_api/src/lib.rs index 7d98eb261..7089323e0 100644 --- a/wp_api/src/lib.rs +++ b/wp_api/src/lib.rs @@ -1,18 +1,16 @@ #![allow(dead_code, unused_variables)] -use request::{WPNetworkRequest, WPNetworkResponse}; +use request::{endpoint::ApiEndpoint, WPNetworkRequest, WPNetworkResponse}; use serde::Deserialize; use std::collections::HashMap; use url::Url; pub use api_error::{WPApiError, WPRestError, WPRestErrorCode, WPRestErrorWrapper}; -use endpoint::*; use login::*; use plugins::*; use users::*; mod api_error; // re-exported relevant types -pub mod endpoint; pub mod login; pub mod plugins; pub mod request; diff --git a/wp_api/src/request.rs b/wp_api/src/request.rs index 5b4c2b1a5..dc3812461 100644 --- a/wp_api/src/request.rs +++ b/wp_api/src/request.rs @@ -4,6 +4,8 @@ use url::Url; use crate::RequestMethod; +pub mod endpoint; + #[derive(uniffi::Record)] pub struct WPNetworkRequest { pub method: RequestMethod, diff --git a/wp_api/src/endpoint.rs b/wp_api/src/request/endpoint.rs similarity index 100% rename from wp_api/src/endpoint.rs rename to wp_api/src/request/endpoint.rs diff --git a/wp_api/src/endpoint/plugins_endpoint.rs b/wp_api/src/request/endpoint/plugins_endpoint.rs similarity index 96% rename from wp_api/src/endpoint/plugins_endpoint.rs rename to wp_api/src/request/endpoint/plugins_endpoint.rs index d26ce0e77..8e051bb72 100644 --- a/wp_api/src/endpoint/plugins_endpoint.rs +++ b/wp_api/src/request/endpoint/plugins_endpoint.rs @@ -1,8 +1,8 @@ use url::Url; -use crate::{plugins::PluginListParams, ApiBaseUrl, PluginSlug, SparsePluginField, WPContext}; +use crate::{plugins::PluginListParams, PluginSlug, SparsePluginField, WPContext}; -use super::UrlExtension; +use super::{ApiBaseUrl, UrlExtension}; pub struct PluginsEndpoint { api_base_url: ApiBaseUrl, @@ -75,8 +75,9 @@ impl PluginsEndpoint { mod tests { use super::*; use crate::{ - endpoint::tests::{fixture_api_base_url, validate_endpoint}, - generate, ApiEndpoint, PluginStatus, + generate, + request::endpoint::tests::{fixture_api_base_url, validate_endpoint}, + ApiEndpoint, PluginStatus, }; use rstest::*; diff --git a/wp_api/src/endpoint/users_endpoint.rs b/wp_api/src/request/endpoint/users_endpoint.rs similarity index 97% rename from wp_api/src/endpoint/users_endpoint.rs rename to wp_api/src/request/endpoint/users_endpoint.rs index fc0443651..6027ee3ce 100644 --- a/wp_api/src/endpoint/users_endpoint.rs +++ b/wp_api/src/request/endpoint/users_endpoint.rs @@ -1,8 +1,8 @@ use url::Url; -use crate::{ApiBaseUrl, SparseUserField, UserDeleteParams, UserId, UserListParams, WPContext}; +use crate::{SparseUserField, UserDeleteParams, UserId, UserListParams, WPContext}; -use super::UrlExtension; +use super::{ApiBaseUrl, UrlExtension}; pub struct UsersEndpoint { api_base_url: ApiBaseUrl, @@ -93,7 +93,7 @@ impl UsersEndpoint { mod tests { use super::*; use crate::{ - endpoint::tests::{fixture_api_base_url, validate_endpoint}, + request::endpoint::tests::{fixture_api_base_url, validate_endpoint}, ApiEndpoint, }; use rstest::*;