Skip to content

Add mapbox isochrone contours - #44

Open
mattpodwysocki wants to merge 1 commit into
feat/directions-apifrom
feat/isochrone-api
Open

mattpodwysocki wants to merge 1 commit into
feat/directions-apifrom
feat/isochrone-api

Conversation

@mattpodwysocki

Copy link
Copy Markdown
Contributor

⚠️ Temporarily based on #43, not main

This reuses ARG_NAME_OVERRIDES and the path_segment_for fix #43
introduces — both APIs' profile path parameter hits the same global-flag
collision. Once #43 merges, this should be retargeted to main (gh pr edit --base main) rather than reviewed against it as a diff. Everything
below is scoped to what this PR actually adds on top of #43.

What

mapbox isochrone contours — the second Navigation-category API with no
prior CLI coverage (see the private tracker's api-coverage audit). Same
shape as #43: hand-authored into custom-openapi/ since openapi-specs
publishes no spec for this API either.

How far you can get from a point in a given time or distance, for driving
(with or without live traffic), walking, or cycling — as GeoJSON polygons
or linestrings.

contours_minutes and contours_meters are mutually exclusive but neither
is individually required by this CLI's own validation — the same "not
enforced before the request goes out" precedent search category already
uses for its own proximity/near/bbox/route disjunction. The API answers 422
if both or neither are given.

Also included

A fix for a --help regression I found while writing this, in code #43
already merged into this branch: first_sentence() in src/main.rs cuts a
--help line at the first ., and eight parameter descriptions in
directions.yaml led with a complete sentence before the substantive
content (`mapbox/driving` only. etc.), eating everything after it.
isochrone.yaml's own denoise had the same shape (0.0-1.0: ...) and
would have rendered as literally 0. Fixed all nine by moving the
qualifier to the end of the description instead of the front — --schema
and docs/commands.md were never affected, since they show descriptions in
full.

Verification

Smoke-tested against production: real contour polygons and linestrings for
mapbox/driving and mapbox/walking, --polygons, and
--contours-minutes with multiple values, all verified to return the
documented GeoJSON shape.

485 tests, cargo fmt --check and cargo clippy --all-targets -- -D warnings both clean.

🤖 Generated with Claude Code

Second of the Navigation-category APIs with no prior CLI coverage. Same
shape as mapbox directions route (#43): hand-authored into
custom-openapi/ since openapi-specs has no spec for this API either, and
reuses that PR's fix for a spec parameter named `profile` colliding with the
global --profile flag (ARG_NAME_OVERRIDES gets a second row, not a second
mechanism).

`contours_minutes` and `contours_meters` are mutually exclusive but neither
is individually required by this CLI's own validation — same "not enforced
before the request goes out" precedent search category already uses for its
own proximity/near/bbox/route disjunction. The API answers 422 if both or
neither are given.

Smoke-tested against production: real contour polygons and linestrings for
driving and walking profiles, --polygons, --contours-minutes with multiple
values, verified to return the documented GeoJSON shape.

Also fixes a self-inflicted --help regression found while writing this:
first_sentence() in src/main.rs cuts a --help line at the first '.', and
several profile-scoped parameter descriptions in directions.yaml (already
merged in this branch) led with a complete sentence before the substantive
content, e.g. "`mapbox/driving` only." — eating everything after it in
--help. isochrone.yaml's own `denoise` had the same shape ("0.0-1.0:
...") and would have rendered as literally "0". Both fixed by moving the
qualifier to the end of the description instead of the front.

485 tests, fmt and clippy clean.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant