Skip to main content

imagegen_bridge_core/
schema.rs

1//! Schema root for the complete native wire contract.
2
3use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5
6use crate::{
7    BridgeError, ImageJob, ImageJobPage, ImageJobUpdate, ImagePreset, ImagePresetCreate,
8    ImagePresetPage, ImagePresetWrite, ImageRequest, ImageResponse, ProviderCapabilities,
9    ProviderDescriptor, ProviderEvent, ValidationIssue,
10};
11
12/// All top-level native messages represented as one versioned JSON Schema.
13#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
14#[serde(tag = "message", content = "body", rename_all = "snake_case")]
15pub enum ContractMessage {
16    /// Normalized request.
17    Request(ImageRequest),
18    /// Normalized response.
19    Response(ImageResponse),
20    /// Provider capability document.
21    Capabilities(ProviderCapabilities),
22    /// Provider discovery document.
23    Provider(ProviderDescriptor),
24    /// Incremental provider event.
25    Event(ProviderEvent),
26    /// Complete durable job detail.
27    Job(Box<ImageJob>),
28    /// Cursor-paginated durable job summaries.
29    JobPage(ImageJobPage),
30    /// Mutable retained-history fields.
31    JobUpdate(ImageJobUpdate),
32    /// Persisted reusable request preset.
33    Preset(ImagePreset),
34    /// Preset create payload.
35    PresetCreate(ImagePresetCreate),
36    /// Preset replacement payload.
37    PresetWrite(ImagePresetWrite),
38    /// Cursor-paginated preset collection.
39    PresetPage(ImagePresetPage),
40    /// Public bridge error.
41    Error(BridgeError),
42    /// One validation issue.
43    ValidationIssue(ValidationIssue),
44}
45
46/// Generates the current native contract schema.
47#[must_use]
48pub fn contract_schema() -> schemars::Schema {
49    schemars::schema_for!(ContractMessage)
50}