Skip to main content

flux_verify_api/api/
response.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Deserialize, Serialize)]
4pub struct TraceEntry {
5    pub opcode: String,
6    #[serde(skip_serializing_if = "Option::is_none")]
7    pub value: Option<f64>,
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub result: Option<f64>,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub expected: Option<f64>,
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub actual: Option<f64>,
14    pub desc: String,
15}
16
17#[derive(Debug, Clone, Deserialize, Serialize)]
18#[serde(untagged)]
19pub enum CounterexampleValue {
20    Number(f64),
21    String(String),
22}
23
24#[derive(Debug, Clone, Deserialize, Serialize)]
25pub struct VerifyResponse {
26    pub status: String, // "PROVEN" | "DISPROVEN" | "UNKNOWN"
27    pub confidence: f64,
28    pub trace: Vec<TraceEntry>,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub counterexample: Option<serde_json::Value>,
31    pub proof_hash: String,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub plato_tile_id: Option<String>,
34}
35
36#[derive(Debug, Clone, Deserialize, Serialize)]
37pub struct StatusResponse {
38    pub total_verifications: u64,
39    pub proven: u64,
40    pub disproven: u64,
41    pub unknown: u64,
42    pub avg_latency_ms: f64,
43}
44
45#[derive(Debug, Clone, Deserialize, Serialize)]
46pub struct HealthResponse {
47    pub status: String,
48    pub version: String,
49}