@@ -7,7 +7,7 @@ use crate::{
7
7
} ;
8
8
use serde:: { Deserialize , Serialize } ;
9
9
use std:: { collections:: HashMap , ops:: Not } ;
10
- use wp_serde_helper:: deserialize_u64_or_string;
10
+ use wp_serde_helper:: { deserialize_false_or_string , deserialize_u64_or_string} ;
11
11
12
12
#[ derive( Debug , Serialize , Deserialize , uniffi:: Record ) ]
13
13
pub struct Subscriber {
@@ -74,8 +74,10 @@ pub enum SubscriptionStatus {
74
74
75
75
#[ derive( Debug , Serialize , Deserialize , uniffi:: Record ) ]
76
76
pub struct SubscriberCountry {
77
- code : String ,
78
- name : String ,
77
+ #[ serde( default , deserialize_with = "deserialize_false_or_string" ) ]
78
+ code : Option < String > ,
79
+ #[ serde( default , deserialize_with = "deserialize_false_or_string" ) ]
80
+ name : Option < String > ,
79
81
}
80
82
81
83
#[ derive( Debug , Serialize , Deserialize , uniffi:: Record ) ]
@@ -95,27 +97,30 @@ pub struct SubscriptionPlan {
95
97
96
98
#[ derive( Debug , Default , PartialEq , Eq , uniffi:: Record ) ]
97
99
pub struct SubscribersListParams {
98
- // The current page.
100
+ /// The current page.
99
101
#[ uniffi( default = None ) ]
100
102
pub page : Option < u64 > ,
101
- // The amount of items to show per page.
103
+ /// The amount of items to show per page.
102
104
#[ uniffi( default = None ) ]
103
105
pub per_page : Option < u64 > ,
104
- // Search for subscribers
106
+ /// Search for subscribers
105
107
#[ uniffi( default = None ) ]
106
108
pub search : Option < String > ,
107
- // Sort subscribers by a specific field
109
+ /// Sort subscribers by a specific field
108
110
#[ uniffi( default = None ) ]
109
111
pub sort : Option < ListSubscribersSortField > ,
110
- // Sort order
112
+ /// Sort order
111
113
#[ uniffi( default = None ) ]
112
114
pub sort_order : Option < WpApiParamOrder > ,
113
- // Filter subscribers by a specific subscriber type
115
+ /// Filter subscribers by a specific subscriber type
114
116
#[ uniffi( default = None ) ]
115
117
pub filter : Option < SubscriberType > ,
116
- // Array of filters to apply (combined with AND logic). If provided, overrides the single filter parameter.
118
+ /// Array of filters to apply (combined with AND logic). If provided, overrides the single filter parameter.
117
119
#[ uniffi( default = None ) ]
118
120
pub filters : Option < Vec < SubscriberType > > ,
121
+ /// An array of additional fields to include
122
+ #[ uniffi( default = [ ] ) ]
123
+ pub include : Vec < ListSubscribersIncludeField > ,
119
124
}
120
125
121
126
impl AppendUrlQueryPairs for SubscribersListParams {
@@ -125,7 +130,8 @@ impl AppendUrlQueryPairs for SubscribersListParams {
125
130
. append_option_query_value_pair ( "per_page" , self . per_page . as_ref ( ) )
126
131
. append_option_query_value_pair ( "search" , self . search . as_ref ( ) )
127
132
. append_option_query_value_pair ( "sort" , self . sort . as_ref ( ) )
128
- . append_option_query_value_pair ( "sort_order" , self . sort_order . as_ref ( ) ) ;
133
+ . append_option_query_value_pair ( "sort_order" , self . sort_order . as_ref ( ) )
134
+ . append_vec_query_value_pair ( "include" , self . include . as_ref ( ) ) ;
129
135
130
136
if let Some ( filters) = & self . filters {
131
137
query_pairs_mut. append_pair (
@@ -165,6 +171,23 @@ pub enum ListSubscribersSortField {
165
171
166
172
impl_as_query_value_from_to_string ! ( ListSubscribersSortField ) ;
167
173
174
+ #[ derive(
175
+ Debug ,
176
+ Serialize ,
177
+ Deserialize ,
178
+ Eq ,
179
+ PartialEq ,
180
+ uniffi:: Enum ,
181
+ strum_macros:: EnumString ,
182
+ strum_macros:: Display ,
183
+ ) ]
184
+ #[ strum( serialize_all = "snake_case" ) ]
185
+ pub enum ListSubscribersIncludeField {
186
+ Country ,
187
+ }
188
+
189
+ impl_as_query_value_from_to_string ! ( ListSubscribersIncludeField ) ;
190
+
168
191
#[ derive( Debug , Serialize , Deserialize , uniffi:: Record ) ]
169
192
pub struct ListSubscribersResponse {
170
193
pub total : u64 ,
@@ -396,6 +419,7 @@ mod tests {
396
419
sort_order : Some ( WpApiParamOrder :: Asc ) ,
397
420
filter : Some ( SubscriberType :: All ) ,
398
421
filters : Some ( vec ! [ SubscriberType :: All ] ) ,
422
+ include : vec ! [ ] ,
399
423
} ;
400
424
401
425
let mut query_pairs = url. query_pairs_mut ( ) ;
@@ -421,6 +445,7 @@ mod tests {
421
445
sort_order : Some ( WpApiParamOrder :: Asc ) ,
422
446
filter : Some ( SubscriberType :: EmailSubscriber ) ,
423
447
filters : None ,
448
+ include : vec ! [ ] ,
424
449
} ;
425
450
426
451
let mut query_pairs = url. query_pairs_mut ( ) ;
0 commit comments