Skip to content

Commit 9ca5566

Browse files
committed
/navigation endpoint
1 parent a05f818 commit 9ca5566

16 files changed

+1095
-38
lines changed

CLAUDE.md

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -97,26 +97,21 @@ WordPress REST API returns different fields depending on the `context` parameter
9797

9898
3. **Define parameter types** for list/create/update operations:
9999
```rust
100-
#[derive(Debug, Default, PartialEq, Eq, uniffi::Record)]
100+
#[derive(Debug, Default, PartialEq, Eq, uniffi::Record, WpDeriveParamsField)]
101+
#[supports_pagination(true)] // or false if endpoint doesn't support pagination
101102
pub struct UserListParams {
102103
#[uniffi(default = None)]
103104
pub page: Option<u32>,
105+
#[uniffi(default = [])]
106+
pub exclude: Vec<UserId>,
104107
// ... other fields
105108
}
106109
```
107-
108-
4. **Implement query parameter handling**:
109-
- Create a `{Type}ListParamsField` enum:
110-
```rust
111-
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, IntoStaticStr)]
112-
enum UserListParamsField {
113-
#[strum(serialize = "page")]
114-
Page,
115-
// ... other fields
116-
}
117-
```
118-
- Implement `AppendUrlQueryPairs` and `FromUrlQueryPairs` traits
119-
- Import helpers: `crate::url_query::{AppendUrlQueryPairs, FromUrlQueryPairs, QueryPairs, QueryPairsExtension, UrlQueryPairsMap}`
110+
- Use `WpDeriveParamsField` macro to automatically generate field enum and query parameter handling
111+
- Add `#[supports_pagination(true/false)]` attribute to indicate pagination support
112+
- Use `#[field_name("custom_name")]` attribute if the API field name differs from the struct field name
113+
- **IMPORTANT**: For array/list parameters, use `Vec<T>` with `#[uniffi(default = [])]`, NOT `Option<Vec<T>>` with `#[uniffi(default = None)]`
114+
- Import: `use wp_derive::WpDeriveParamsField;`
120115

121116
**Special parameter types:**
122117

scripts/setup-test-site.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,10 @@ create_test_credentials () {
237237
NAV_MENU_ITEM_AUTOSAVE_RESPONSE="$(create_nav_menu_item_autosave "1" "$NAV_MENU_ITEM_ID")"
238238
AUTOSAVE_ID_FOR_NAV_MENU_ITEM_ID="$(echo "$NAV_MENU_ITEM_AUTOSAVE_RESPONSE" | jq -r '.id')"
239239

240+
echo "Creating a navigation for integration tests.."
241+
NAVIGATION_RESPONSE="$(curl --silent --user "$ADMIN_USERNAME":"$ADMIN_PASSWORD" -H "Content-Type: application/json" -d '{"title":"Integration Test Navigation","content":"<!-- wp:navigation --><!-- /wp:navigation -->","status":"publish"}' http://localhost/wp-json/wp/v2/navigation)"
242+
NAVIGATION_ID="$(echo "$NAVIGATION_RESPONSE" | jq -r '.id')"
243+
240244
rm -rf /app/test_credentials.json
241245
jo -p \
242246
site_url="$SITE_URL" \
@@ -274,6 +278,7 @@ create_test_credentials () {
274278
footer_menu_location="$FOOTER_MENU_LOCATION" \
275279
nav_menu_item_id="$NAV_MENU_ITEM_ID" \
276280
autosave_id_for_nav_menu_item_id="$AUTOSAVE_ID_FOR_NAV_MENU_ITEM_ID" \
281+
navigation_id="$NAVIGATION_ID" \
277282
> /app/test_credentials.json
278283
}
279284
create_test_credentials

wp_api/src/api_client.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use crate::{
1919
},
2020
nav_menu_items_endpoint::{NavMenuItemsRequestBuilder, NavMenuItemsRequestExecutor},
2121
nav_menus_endpoint::{NavMenusRequestBuilder, NavMenusRequestExecutor},
22+
navigations_endpoint::{NavigationsRequestBuilder, NavigationsRequestExecutor},
2223
plugins_endpoint::{PluginsRequestBuilder, PluginsRequestExecutor},
2324
post_autosaves_endpoint::{AutosavesRequestBuilder, AutosavesRequestExecutor},
2425
post_revisions_endpoint::{PostRevisionsRequestBuilder, PostRevisionsRequestExecutor},
@@ -58,6 +59,7 @@ pub struct WpApiRequestBuilder {
5859
nav_menu_item_autosaves: Arc<NavMenuItemAutosavesRequestBuilder>,
5960
nav_menu_items: Arc<NavMenuItemsRequestBuilder>,
6061
nav_menus: Arc<NavMenusRequestBuilder>,
62+
navigations: Arc<NavigationsRequestBuilder>,
6163
plugins: Arc<PluginsRequestBuilder>,
6264
post_revisions: Arc<PostRevisionsRequestBuilder>,
6365
post_statuses: Arc<PostStatusesRequestBuilder>,
@@ -93,6 +95,7 @@ impl WpApiRequestBuilder {
9395
nav_menu_item_autosaves,
9496
nav_menu_items,
9597
nav_menus,
98+
navigations,
9699
plugins,
97100
post_revisions,
98101
post_statuses,
@@ -138,6 +141,7 @@ pub struct WpApiClient {
138141
nav_menu_item_autosaves: Arc<NavMenuItemAutosavesRequestExecutor>,
139142
nav_menu_items: Arc<NavMenuItemsRequestExecutor>,
140143
nav_menus: Arc<NavMenusRequestExecutor>,
144+
navigations: Arc<NavigationsRequestExecutor>,
141145
plugins: Arc<PluginsRequestExecutor>,
142146
post_revisions: Arc<PostRevisionsRequestExecutor>,
143147
post_statuses: Arc<PostStatusesRequestExecutor>,
@@ -170,6 +174,7 @@ impl WpApiClient {
170174
nav_menu_item_autosaves,
171175
nav_menu_items,
172176
nav_menus,
177+
navigations,
173178
plugins,
174179
post_revisions,
175180
post_statuses,
@@ -212,6 +217,7 @@ api_client_generate_endpoint_impl!(WpApi, menu_locations);
212217
api_client_generate_endpoint_impl!(WpApi, nav_menu_item_autosaves);
213218
api_client_generate_endpoint_impl!(WpApi, nav_menu_items);
214219
api_client_generate_endpoint_impl!(WpApi, nav_menus);
220+
api_client_generate_endpoint_impl!(WpApi, navigations);
215221
api_client_generate_endpoint_impl!(WpApi, plugins);
216222
api_client_generate_endpoint_impl!(WpApi, post_revisions);
217223
api_client_generate_endpoint_impl!(WpApi, post_statuses);

wp_api/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ pub mod middleware;
2222
pub mod nav_menu_item_revisions;
2323
pub mod nav_menu_items;
2424
pub mod nav_menus;
25+
pub mod navigations;
2526
pub mod parsed_url;
2627
pub mod plugins;
2728
pub mod post_revisions;

0 commit comments

Comments
 (0)