Skip to content

Commit 1f392c7

Browse files
Introduces NetworkRequestAccessor trait (#716)
* Introduces `HasNetworkRequestId` trait * Repurpose HasNetworkRequestId to contain more HTTP request data * Address missing use statements for the new NetworkRequestDescriptor * Rename `NetworkRequestDescriptor` as `NetworkRequestAccessor` --------- Co-authored-by: Tony Li <[email protected]>
1 parent 45dd721 commit 1f392c7

File tree

6 files changed

+59
-37
lines changed

6 files changed

+59
-37
lines changed

wp_api/src/request.rs

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,6 @@ pub struct WpNetworkRequest {
173173

174174
#[uniffi::export]
175175
impl WpNetworkRequest {
176-
/// Unique identifier for this request – used for external record-keeping
177-
pub fn request_id(&self) -> String {
178-
self.uuid.clone()
179-
}
180-
181176
/// Clones the request and increments the retry count
182177
pub fn clone_with_incremented_retry_count(&self) -> Self {
183178
Self {
@@ -195,18 +190,6 @@ impl WpNetworkRequest {
195190
self.retry_count
196191
}
197192

198-
pub fn method(&self) -> RequestMethod {
199-
self.method.clone()
200-
}
201-
202-
pub fn url(&self) -> WpEndpointUrl {
203-
self.url.clone()
204-
}
205-
206-
pub fn header_map(&self) -> Arc<WpNetworkHeaderMap> {
207-
self.header_map.clone()
208-
}
209-
210193
pub fn body(&self) -> Option<Arc<WpNetworkRequestBody>> {
211194
self.body.clone()
212195
}
@@ -279,6 +262,34 @@ impl Debug for WpNetworkRequest {
279262
}
280263
}
281264

265+
/// Unique identifier for this request – used for external record-keeping
266+
#[uniffi::export(with_foreign)]
267+
pub trait NetworkRequestAccessor: Send + Sync {
268+
fn request_id(&self) -> String;
269+
fn method(&self) -> RequestMethod;
270+
fn url(&self) -> WpEndpointUrl;
271+
fn header_map(&self) -> Arc<WpNetworkHeaderMap>;
272+
}
273+
274+
#[uniffi::export]
275+
impl NetworkRequestAccessor for WpNetworkRequest {
276+
fn request_id(&self) -> String {
277+
self.uuid.clone()
278+
}
279+
280+
fn method(&self) -> RequestMethod {
281+
self.method.clone()
282+
}
283+
284+
fn url(&self) -> WpEndpointUrl {
285+
self.url.clone()
286+
}
287+
288+
fn header_map(&self) -> Arc<WpNetworkHeaderMap> {
289+
self.header_map.clone()
290+
}
291+
}
292+
282293
// Has custom `Debug` trait implementation
283294
#[derive(uniffi::Record)]
284295
pub struct WpNetworkResponse {

wp_api/src/request/endpoint/media_endpoint.rs

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ use crate::{
99
SparseMediaFieldWithViewContext,
1010
},
1111
request::{
12-
CONTENT_TYPE_MULTIPART, ParsedResponse, RequestMethod, WpNetworkHeaderMap,
13-
WpNetworkResponse,
12+
CONTENT_TYPE_MULTIPART, NetworkRequestAccessor, ParsedResponse, RequestMethod,
13+
WpNetworkHeaderMap, WpNetworkResponse,
1414
},
1515
};
1616
use http::HeaderValue;
17+
use uuid::Uuid;
1718
use wp_derive_request_builder::WpDerivedRequest;
1819

1920
#[derive(WpDerivedRequest)]
@@ -119,6 +120,7 @@ fn parse_as_media_request_create_response(
119120

120121
#[derive(uniffi::Object)]
121122
pub struct MediaUploadRequest {
123+
pub(crate) uuid: String,
122124
pub(crate) method: RequestMethod,
123125
pub(crate) url: WpEndpointUrl,
124126
pub(crate) header_map: Arc<WpNetworkHeaderMap>,
@@ -129,18 +131,6 @@ pub struct MediaUploadRequest {
129131

130132
#[uniffi::export]
131133
impl MediaUploadRequest {
132-
pub fn method(&self) -> RequestMethod {
133-
self.method.clone()
134-
}
135-
136-
pub fn url(&self) -> WpEndpointUrl {
137-
self.url.clone()
138-
}
139-
140-
pub fn header_map(&self) -> Arc<WpNetworkHeaderMap> {
141-
self.header_map.clone()
142-
}
143-
144134
pub fn file_path(&self) -> String {
145135
self.file_path.clone()
146136
}
@@ -179,6 +169,25 @@ impl std::fmt::Debug for MediaUploadRequest {
179169
}
180170
}
181171

172+
#[uniffi::export]
173+
impl NetworkRequestAccessor for MediaUploadRequest {
174+
fn request_id(&self) -> String {
175+
self.uuid.clone()
176+
}
177+
178+
fn method(&self) -> RequestMethod {
179+
self.method.clone()
180+
}
181+
182+
fn url(&self) -> WpEndpointUrl {
183+
self.url.clone()
184+
}
185+
186+
fn header_map(&self) -> Arc<WpNetworkHeaderMap> {
187+
self.header_map.clone()
188+
}
189+
}
190+
182191
#[uniffi::export]
183192
impl MediaRequestBuilder {
184193
pub fn create(
@@ -193,6 +202,7 @@ impl MediaRequestBuilder {
193202
HeaderValue::from_static(CONTENT_TYPE_MULTIPART),
194203
);
195204
MediaUploadRequest {
205+
uuid: Uuid::new_v4().into(),
196206
method: RequestMethod::POST,
197207
url: self.endpoint.create().into(),
198208
header_map: header_map.into(),

wp_api/src/reqwest_request_executor.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ use crate::{
22
MediaUploadRequestExecutionError, RequestExecutionError, RequestExecutionErrorReason,
33
api_error::InvalidSslErrorReason,
44
request::{
5-
RequestExecutor, RequestMethod, WpNetworkHeaderMap, WpNetworkRequest, WpNetworkResponse,
6-
endpoint::media_endpoint::MediaUploadRequest, user_agent,
5+
NetworkRequestAccessor, RequestExecutor, RequestMethod, WpNetworkHeaderMap,
6+
WpNetworkRequest, WpNetworkResponse, endpoint::media_endpoint::MediaUploadRequest,
7+
user_agent,
78
},
89
};
910
use async_trait::async_trait;

wp_api_integration_tests/tests/test_app_notifier_immut.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use wp_api::{
1010
auth::WpAuthenticationProvider,
1111
middleware::WpApiMiddlewarePipeline,
1212
request::{
13-
RequestExecutor, WpNetworkRequest, WpNetworkResponse,
13+
NetworkRequestAccessor, RequestExecutor, WpNetworkRequest, WpNetworkResponse,
1414
endpoint::media_endpoint::MediaUploadRequest,
1515
},
1616
reqwest_request_executor::ReqwestRequestExecutor,

wp_api_integration_tests/tests/test_login_remote.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use wp_api::{
1414
ApiDiscoveryAuthenticationMiddleware, RetryAfterMiddleware, WpApiMiddleware,
1515
WpApiMiddlewarePipeline,
1616
},
17-
request::RequestExecutor,
17+
request::{NetworkRequestAccessor, RequestExecutor},
1818
reqwest_request_executor::ReqwestRequestExecutor,
1919
};
2020
use wp_api_integration_tests::mock::{MockExecutor, response_helpers};

wp_api_integration_tests/tests/test_media_err.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ use wp_api::{
1010
middleware::WpApiMiddlewarePipeline,
1111
posts::WpApiParamPostsOrderBy,
1212
request::{
13-
RequestExecutor, WpNetworkHeaderMap, WpNetworkRequest, WpNetworkResponse,
14-
endpoint::media_endpoint::MediaUploadRequest,
13+
NetworkRequestAccessor, RequestExecutor, WpNetworkHeaderMap, WpNetworkRequest,
14+
WpNetworkResponse, endpoint::media_endpoint::MediaUploadRequest,
1515
},
1616
reqwest_request_executor::ReqwestRequestExecutor,
1717
users::UserId,

0 commit comments

Comments
 (0)