openapp-sdk 0.1.50

Rust-first OpenApp SDK: thin facade over openapp-sdk-core for direct Cargo integration.
Documentation
# packages/sdk/rust — user-facing Rust crate (`openapp-sdk`) over core.

import "../../../justfiles/common.just"

_pkg := source_directory()
_compose := source_directory() / ".." / "docker" / "compose.yaml"

_:
    @just --list

# Consumer crate: commands under packages/sdk/rust in sdk-rust.
_rust *ARGS:
    SDK_DOCKER_UID="${SDK_DOCKER_UID:-$(id -u)}" SDK_DOCKER_GID="${SDK_DOCKER_GID:-$(id -g)}" docker compose -f {{ _compose }} run --rm sdk-rust \
        sh -euxc '{{ ARGS }}'

# Chain multiple cargo invocations in one container.
_rust_cmd CMD:
    SDK_DOCKER_UID="${SDK_DOCKER_UID:-$(id -u)}" SDK_DOCKER_GID="${SDK_DOCKER_GID:-$(id -g)}" docker compose -f {{ _compose }} run --rm sdk-rust \
        sh -euxc '{{ CMD }}'

# Core workspace (OpenAPI generator lives in crates/common).
_core *ARGS:
    SDK_DOCKER_UID="${SDK_DOCKER_UID:-$(id -u)}" SDK_DOCKER_GID="${SDK_DOCKER_GID:-$(id -g)}" docker compose -f {{ _compose }} run --rm sdk-core \
        sh -euxc 'cd crates/common && {{ ARGS }}'

build:
    @just _rust cargo build

test:
    @just _rust cargo test

lint:
    @just _rust_cmd 'cargo fmt --all -- --check && cargo clippy --all-targets --all-features -- -D warnings'

# OpenAPI drift for Rust core-generated sources (runs in sdk-core workspace).
openapi-check:
    @just _core cargo run --features openapi-gen --bin openapp-sdk-openapi-gen -- --check

# Regenerate core OpenAPI-derived Rust (`packages/sdk/core`); this crate consumes it via path dep.
generate:
    @just _core cargo run --features openapi-gen --bin openapp-sdk-openapi-gen

# Single source of truth for fmt/clippy/build/test (host or sdk-rust container).
_rust_gate_cmd := "cargo fmt --all -- --check && cargo clippy --all-targets --all-features -- -D warnings && cargo build && cargo test"

# Host toolchain — matches `.github/workflows/sdk-unified-release.yml` (not Docker `just sdk docker rust`).
# OpenAPI drift for this crate is `openapi-check` below; release CI runs `just sdk openapi-check` (includes it) before this recipe — do not duplicate here.
release-gate:
    {{ _rust_gate_cmd }}

# Invoked from repo root via `scripts/pre-commit-subproject-wrapper.sh packages/sdk/rust`.
# Runs `openapi-check` then the same cargo chain as `release-gate` (in Docker). Full release still needs `just sdk openapi-check` once at the coordinator.
pre-commit: openapi-check
    @just _rust_cmd '{{ _rust_gate_cmd }}'

# crates.io consumer crate (`openapp-sdk`). Requires `openapp-sdk-core` on crates.io
# (from repo root: `just sdk core publish` then `just sdk rust publish`, or `sdk-unified-release.yml`).
publish *ARGS:
    @just _rust_cmd 'cargo publish {{ ARGS }}'