Skip to content

Commit 9edb495

Browse files
authored
Add WP.com Subscribers Endpoints (#735)
* Add Subscribers Endpoints * Use strum instead of manually deriving display * Use `UserId` for Subscriber * Spacing improvement * subscriptions -> subscribers * Rename list params * Clarify GetSubscriberQuery variants * SubscriberImportJobStatus improvements * Use parameterized testing for wp_utc_date_time * Swift fix
1 parent 06569b9 commit 9edb495

File tree

14 files changed

+1003
-21
lines changed

14 files changed

+1003
-21
lines changed

native/swift/Sources/wordpress-api/Exports.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,4 +135,11 @@ public typealias WpSiteHealthTestsRequestExecutor = WordPressAPIInternal.WpSiteH
135135
public typealias WordPressOrgApiClient = WordPressAPIInternal.WordPressOrgApiClient
136136

137137
// MARK: - WordPress.com
138+
139+
// MARK: OAuth2
138140
public typealias TokenValidationParameters = WordPressAPIInternal.TokenValidationParameters
141+
142+
// MARK: Subscribers
143+
public typealias SubscribersListParams = WordPressAPIInternal.SubscribersListParams
144+
public typealias SubscriberImportJobsListParams = WordPressAPIInternal.SubscriberImportJobsListParams
145+
public typealias AddSubscribersParams = WordPressAPIInternal.AddSubscribersParams

native/swift/Sources/wordpress-api/WPComApiClient.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,8 @@ public class WPComApiClient {
1717
public var jetpackConnection: JetpackConnectionRequestExecutor {
1818
internalClient.jetpackConnection()
1919
}
20+
21+
public var subscribers: SubscribersRequestExecutor {
22+
internalClient.subscribers()
23+
}
2024
}

wp_api/src/api_error.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,10 @@ impl WpError {
154154
pub fn try_parse(response_body: &[u8]) -> Option<Self> {
155155
serde_json::from_slice::<WpError>(response_body).ok()
156156
}
157+
158+
pub fn try_parse_from_file(file: std::fs::File) -> Option<Self> {
159+
serde_json::from_reader(file).ok()
160+
}
157161
}
158162

159163
#[derive(Debug, Clone, Deserialize, PartialEq, Eq, uniffi::Error)]

wp_api/src/wp_com/client.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use super::endpoint::jetpack_connection_endpoint::{
22
JetpackConnectionRequestBuilder, JetpackConnectionRequestExecutor,
33
};
44
use super::endpoint::oauth2::{Oauth2RequestBuilder, Oauth2RequestExecutor};
5+
use super::endpoint::subscribers::{SubscribersRequestBuilder, SubscribersRequestExecutor};
56
use crate::api_client_generate_request_builder;
67
use crate::{
78
ParsedUrl, WpApiClientDelegate, api_client_generate_api_client,
@@ -27,6 +28,7 @@ impl UniffiWpComApiRequestBuilder {
2728
pub struct WpComApiRequestBuilder {
2829
jetpack_connection: Arc<JetpackConnectionRequestBuilder>,
2930
oauth2: Arc<Oauth2RequestBuilder>,
31+
subscribers: Arc<SubscribersRequestBuilder>,
3032
}
3133

3234
impl WpComApiRequestBuilder {
@@ -35,7 +37,8 @@ impl WpComApiRequestBuilder {
3537
api_root_url,
3638
auth_provider;
3739
jetpack_connection,
38-
oauth2
40+
oauth2,
41+
subscribers
3942
)
4043
}
4144
}
@@ -58,6 +61,7 @@ impl UniffiWpComApiClient {
5861
pub struct WpComApiClient {
5962
jetpack_connection: Arc<JetpackConnectionRequestExecutor>,
6063
oauth2: Arc<Oauth2RequestExecutor>,
64+
subscribers: Arc<SubscribersRequestExecutor>,
6165
}
6266

6367
impl WpComApiClient {
@@ -69,9 +73,11 @@ impl WpComApiClient {
6973
api_root_url,
7074
delegate;
7175
jetpack_connection,
72-
oauth2
76+
oauth2,
77+
subscribers
7378
)
7479
}
7580
}
7681
api_client_generate_endpoint_impl!(WpComApi, jetpack_connection);
7782
api_client_generate_endpoint_impl!(WpComApi, oauth2);
83+
api_client_generate_endpoint_impl!(WpComApi, subscribers);

wp_api/src/wp_com/endpoint.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
pub mod jetpack_connection_endpoint;
22
pub mod oauth2;
3+
pub mod subscribers;
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
use crate::{
2+
request::endpoint::{AsNamespace, DerivedRequest},
3+
wp_com::{
4+
WpComNamespace, WpComSiteId,
5+
subscribers::{
6+
AddSubscribersParams, AddSubscribersResponse, GetSubscriberQuery,
7+
ListSubscribersResponse, SubscriberImportJob, SubscriberImportJobsListParams,
8+
SubscriberStatsResponse, SubscribersListParams, UploadId,
9+
},
10+
},
11+
};
12+
use wp_derive_request_builder::WpDerivedRequest;
13+
14+
#[derive(WpDerivedRequest)]
15+
enum SubscribersRequest {
16+
#[get(url = "/sites/<wp_com_site_id>/subscribers", params = &SubscribersListParams, output = ListSubscribersResponse)]
17+
ListSubscribers,
18+
#[get(url = "/sites/<wp_com_site_id>/subscribers/individual", params = &GetSubscriberQuery, output = SubscriberImportJob)]
19+
GetSubscriber,
20+
#[get(url = "/sites/<wp_com_site_id>/subscribers/import", params = &SubscriberImportJobsListParams, output = Vec<SubscriberImportJob>)]
21+
ListSubscriberImportJobs,
22+
#[get(url = "/sites/<wp_com_site_id>/subscribers/import/<upload_id>", output = SubscriberImportJob)]
23+
GetSubscriberImportJob,
24+
#[post(url = "/sites/<wp_com_site_id>/subscribers/import", params = &AddSubscribersParams, output = AddSubscribersResponse)]
25+
AddSubscribers,
26+
#[get(url = "/sites/<wp_com_site_id>/subscribers/stats", output = SubscriberStatsResponse)]
27+
GetSubscriberStats,
28+
}
29+
30+
impl DerivedRequest for SubscribersRequest {
31+
fn namespace() -> impl AsNamespace {
32+
WpComNamespace::V2
33+
}
34+
}

wp_api/src/wp_com/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ pub mod client;
66
pub mod endpoint;
77
pub mod jetpack_connection;
88
pub mod oauth2;
9+
pub mod subscribers;
910

1011
impl_as_query_value_for_new_type!(WpComSiteId);
1112
uniffi::custom_newtype!(WpComSiteId, u64);

0 commit comments

Comments
 (0)