Skip to content

api contract shapes

Douwe de Vries edited this page Jul 2, 2026 · 1 revision

Contract shapes

Purpose

Contract shapes define the JSON and command payloads shared by Rust and TypeScript. They keep backend workflows, browser mode, desktop mode, and frontend state aligned.

Main contracts

Contract Rust source TypeScript source
File load response src/presentation/responses.rs frontend/src/types/api.ts
Mapping request/response src/backend/requests.rs, src/presentation/responses.rs frontend/src/types/api.ts
Compare request/response src/backend/requests.rs, src/presentation/responses.rs frontend/src/types/api.ts
Pair-order selection src/backend/requests.rs frontend/src/types/api.ts
Snapshot load response src/backend/requests.rs frontend/src/types/api.ts
Error body src/backend/error.rs frontend/src/services/http.ts, frontend/src/services/tauri.ts

Shape rules

Rust uses serde snake_case for most wire fields. Frontend types in frontend/src/types/api.ts mirror those names rather than converting them to camelCase. This keeps transport helpers simple and reduces accidental field drift.

Key source files

File Purpose
src/backend/requests.rs Request DTOs and validation errors.
src/presentation/responses.rs Response DTOs and conversions.
src/backend/error.rs Error DTO shape and status mapping.
frontend/src/types/api.ts Frontend wire types.
tests/response_contracts.rs Contract regression tests.

For user-facing results, see comparison results.

Clone this wiki locally