@@ -249,3 +249,43 @@ doc-prev: ## Generate live preview of docs and open in browser.
249249 mdbook clean docs/
250250 mdbook build docs/
251251 mdbook serve docs/ --open
252+
253+
254+ SWAGGER_IMG := swaggerapi/swagger-ui
255+ SWAGGER_NAME := swagger-ui-preview
256+ OPENAPI_FILE := openapi.json
257+
258+ .PHONY : api-prev
259+ api-prev : # # Generate live preview of OpenAPI Swagger Docs and open in browser (port 8080).
260+ @set -e; \
261+ echo " Generating OpenAPI spec..." ; \
262+ cargo run --example generate_openapi_spec > $(OPENAPI_FILE ) ; \
263+ echo " Starting Swagger UI..." ; \
264+ cid=" $$ (docker ps -q -f name=^/$( SWAGGER_NAME) $$ )" ; \
265+ if [ -n " $$ cid" ]; then \
266+ echo " Restarting existing container $$ cid" ; \
267+ docker restart " $$ cid" > /dev/null; \
268+ else \
269+ old=" $$ (docker ps -aq -f name=^/$( SWAGGER_NAME) $$ )" ; \
270+ if [ -n " $$ old" ]; then \
271+ echo " Removing stale container $$ old" ; \
272+ docker rm -f " $$ old" > /dev/null || true ; \
273+ fi ; \
274+ cid=" $$ (docker run -d --rm \
275+ --name $(SWAGGER_NAME ) \
276+ -p 8080:8080 \
277+ -e SWAGGER_JSON=/openapi.json \
278+ -v $$(pwd ) /$(OPENAPI_FILE ) :/openapi.json:ro \
279+ $(SWAGGER_IMG ) )" ; \
280+ echo " Started container $$ cid" ; \
281+ fi ; \
282+ if command -v open > /dev/null 2>&1 ; then \
283+ open http://localhost:8080; \
284+ elif command -v xdg-open > /dev/null 2>&1 ; then \
285+ xdg-open http://localhost:8080; \
286+ else \
287+ echo " Open http://localhost:8080 manually" ; \
288+ fi ; \
289+ trap ' echo ""; echo "Stopping Swagger UI..."; docker stop "$$cid" >/dev/null || true' INT TERM EXIT; \
290+ echo " Swagger UI running (Ctrl-C to stop)" ; \
291+ wait
0 commit comments