use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Lifecycle {
pub on_timeout: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub auto_resume: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub park_after_ms: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub park_max_ms: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hibernate_after_parked_ms: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub checkpoint_every_ms: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VolumeAttachment {
pub volume_id: String,
pub path: String,
}
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateSandboxRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub template: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub kind: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cpu: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mem_mb: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub disk_gb: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub envs: Option<HashMap<String, String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timeout_ms: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ttl_seconds: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub from_snapshot: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub isolation: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub lifecycle: Option<Lifecycle>,
#[serde(skip_serializing_if = "Option::is_none")]
pub resolution: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub record: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub volumes: Option<Vec<VolumeAttachment>>,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ResumeResponse {
#[serde(default)]
pub state: String,
#[serde(default)]
pub control_url: Option<String>,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StartResponse {
#[serde(default)]
pub state: String,
#[serde(default)]
pub control_url: Option<String>,
#[serde(default)]
pub already_running: Option<bool>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateSandboxResponse {
pub sandbox_id: String,
#[serde(default)]
pub kind: String,
pub control_url: String,
#[serde(default)]
pub expires_at: String,
#[serde(default)]
pub stream_url: Option<String>,
#[serde(default)]
pub recording_url: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SandboxView {
pub sandbox_id: String,
#[serde(default)]
pub kind: String,
#[serde(default)]
pub state: String,
#[serde(default)]
pub expires_at: String,
#[serde(default)]
pub control_url: Option<String>,
}
#[derive(Debug, Clone, Default, Deserialize)]
pub struct GatewayErrorBody {
#[serde(default)]
pub code: Option<String>,
#[serde(default)]
pub error: Option<String>,
#[serde(default)]
pub message: Option<String>,
#[serde(default)]
pub retryable: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CommandResult {
#[serde(default)]
pub exit_code: i64,
#[serde(default)]
pub stdout: String,
#[serde(default)]
pub stderr: String,
#[serde(default)]
pub timed_out: bool,
}
#[derive(Debug, Clone, Deserialize)]
pub struct FsEntry {
#[serde(default)]
pub name: String,
#[serde(default, rename = "dir")]
pub dir: bool,
#[serde(default)]
pub size: i64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct FsStat {
#[serde(default)]
pub name: String,
#[serde(default, rename = "dir")]
pub dir: bool,
#[serde(default)]
pub size: i64,
#[serde(default)]
pub mode: i64,
#[serde(default, rename = "modTimeMs")]
pub mod_time_ms: i64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ChartType {
Line,
Scatter,
Bar,
Pie,
BoxAndWhisker,
Composite,
#[serde(other)]
Unknown,
}
impl Default for ChartType {
fn default() -> Self {
ChartType::Unknown
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ChartAxis {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ticks: Option<Vec<Value>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub scale: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Chart {
#[serde(default, rename = "type")]
pub chart_type: ChartType,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub x_label: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub y_label: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub x: Option<ChartAxis>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub y: Option<ChartAxis>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub elements: Option<Value>,
}
#[derive(Debug, Clone, Default, Deserialize)]
pub struct CodeResultItem {
#[serde(default, rename = "type")]
pub result_type: String,
#[serde(default)]
pub text: Option<String>,
#[serde(default)]
pub png: Option<String>,
#[serde(default)]
pub jpeg: Option<String>,
#[serde(default)]
pub svg: Option<String>,
#[serde(default)]
pub html: Option<String>,
#[serde(default)]
pub latex: Option<String>,
#[serde(default)]
pub json: Option<Value>,
#[serde(default)]
pub markdown: Option<String>,
#[serde(default)]
pub chart: Option<Chart>,
}
#[derive(Debug, Clone, Default)]
pub struct RunCodeResult {
pub results: Vec<CodeResultItem>,
pub error: Option<Value>,
pub charts: Vec<Chart>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct GitStatus {
pub branch: String,
pub detached: bool,
pub ahead: i64,
pub behind: i64,
pub staged: Vec<String>,
pub modified: Vec<String>,
pub untracked: Vec<String>,
pub clean: bool,
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct GitBranch {
pub name: String,
pub commit: String,
pub current: bool,
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct GitCommit {
pub hash: String,
pub author: String,
pub email: String,
pub date: String,
pub message: String,
}