#![allow(dead_code)]
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct ProjectsPage {
pub projects: Vec<Project>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Project {
pub id: String,
pub slug: String,
pub name: String,
#[serde(default)]
pub environment_name: String,
#[serde(default)]
pub service_count: u32,
#[serde(default)]
pub online_count: u32,
#[serde(default)]
pub services: Vec<Service>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ServicesPage {
pub services: Vec<Service>,
#[serde(default)]
pub edges: Vec<Edge>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Service {
pub id: String,
pub service_id: String,
pub name: String,
pub slug: String,
pub kind: String,
pub state: String,
#[serde(default)]
pub brand: Option<String>,
#[serde(default)]
pub host: Option<String>,
#[serde(default)]
pub repo_full_name: Option<String>,
#[serde(default)]
pub last_deployment_number: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Edge {
pub from: String,
pub to: String,
pub label: String,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Canvas {
pub project_id: String,
pub environment_id: String,
pub nodes: Vec<CanvasNode>,
#[serde(default)]
pub edges: Vec<CanvasArrow>,
#[serde(default)]
pub bounds: Option<CanvasBounds>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CanvasNode {
pub service_id: String,
pub service_environment_id: String,
pub name: String,
pub slug: String,
pub kind: String,
pub state: String,
pub x: i64,
pub y: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CanvasArrow {
pub from: String,
pub to: String,
pub from_service_id: String,
pub to_service_id: String,
#[serde(default)]
pub keys: Vec<String>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub struct CanvasBounds {
pub left: i64,
pub top: i64,
pub right: i64,
pub bottom: i64,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CanvasPlacement {
pub service_id: String,
pub x: i64,
pub y: i64,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ServiceDetail {
pub service: ServiceIdentity,
pub environment: ServiceEnvironment,
#[serde(default)]
pub domains: Vec<Domain>,
#[serde(default)]
pub active_deployment: Option<Deployment>,
#[serde(default)]
pub live_deployment: Option<Deployment>,
#[serde(default)]
pub capabilities: Option<ServiceCapabilities>,
#[serde(default)]
pub config_format: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ServiceIdentity {
pub id: String,
pub name: String,
pub slug: String,
pub kind: String,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ServiceEnvironment {
pub id: String,
pub state: String,
#[serde(default)]
pub memory_mb: u32,
#[serde(default)]
pub cpus: f32,
#[serde(default)]
pub sleep_enabled: bool,
#[serde(default)]
pub sleep_after_minutes: u32,
#[serde(default)]
pub container_port: Option<u32>,
#[serde(default)]
pub health_path: Option<String>,
#[serde(default)]
pub health_path_origin: Option<String>,
#[serde(default)]
pub health_probe: Option<String>,
#[serde(default)]
pub health_probe_resolved: Option<String>,
#[serde(default)]
pub health_timeout_seconds: Option<u32>,
#[serde(default)]
pub health_interval_seconds: Option<u32>,
#[serde(default)]
pub health_grace_seconds: Option<u32>,
#[serde(default)]
pub adopted: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ServiceCapabilities {
#[serde(default)]
pub framework: Option<String>,
#[serde(default)]
pub framework_version: Option<String>,
#[serde(default)]
pub rendering: String,
#[serde(default)]
pub declared_port: Option<u32>,
#[serde(default)]
pub endpoints: Vec<CapabilityEndpoint>,
#[serde(default)]
pub shallow: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CapabilityEndpoint {
pub path: String,
pub kind: String,
#[serde(default)]
pub evidence: String,
#[serde(default)]
pub confidence: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Deployment {
pub id: String,
pub number: u32,
pub status: String,
pub trigger: String,
#[serde(default)]
pub commit_sha: Option<String>,
#[serde(default)]
pub commit_subject: Option<String>,
#[serde(default)]
pub failure_message: Option<String>,
pub created_at: String,
#[serde(default)]
pub finished_at: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Upload {
pub id: String,
pub file_name: String,
pub format: String,
pub digest: String,
pub size_bytes: u64,
pub created_at: String,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UploadsPage {
pub uploads: Vec<Upload>,
#[serde(default)]
pub current: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UploadAccepted {
pub upload: Upload,
#[serde(default)]
pub deployment: Option<Deployment>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DeploymentsPage {
pub deployments: Vec<Deployment>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DeploymentAccepted {
pub deployment: Deployment,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DeploymentDetail {
pub deployment: Deployment,
pub pipeline: Pipeline,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Pipeline {
pub stages: Vec<Stage>,
#[serde(default)]
pub current_stage_id: Option<String>,
pub finished: bool,
pub succeeded: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Stage {
pub id: String,
pub label: String,
pub state: String,
#[serde(default)]
pub started_at: Option<String>,
#[serde(default)]
pub finished_at: Option<String>,
#[serde(default)]
pub failure_message: Option<String>,
#[serde(default)]
pub log_line_count: u32,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct VariablesPage {
pub variables: Vec<Variable>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Variable {
pub id: String,
pub key: String,
pub kind: String,
#[serde(default)]
pub preview: Option<String>,
#[serde(default)]
pub write_only: bool,
#[serde(default)]
pub sealed_at: Option<String>,
}
impl Variable {
pub fn is_sealed(&self) -> bool {
self.sealed_at.is_some()
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct RevealedVariable {
pub value: String,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BackupsPage {
#[serde(default)]
pub schedules: Vec<String>,
#[serde(default)]
pub next_at: Option<String>,
#[serde(default)]
pub supported: bool,
#[serde(default)]
pub remote: Option<String>,
#[serde(default)]
pub backups: Vec<Backup>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Backup {
pub id: String,
#[serde(default)]
pub schedule: Option<String>,
pub status: String,
#[serde(default)]
pub size_bytes: u64,
#[serde(default)]
pub locked: bool,
#[serde(default)]
pub failure_message: Option<String>,
pub created_at: String,
#[serde(default)]
pub replicated_at: Option<String>,
#[serde(default)]
pub replication_error: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BackupTaken {
pub backup: Backup,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BackupSchedules {
#[serde(default)]
pub schedules: Vec<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DomainsPage {
pub domains: Vec<Domain>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Domain {
pub id: String,
pub host: String,
pub kind: String,
pub state: String,
#[serde(default)]
pub dns_instructions: Option<String>,
#[serde(default = "enabled_by_default")]
pub enabled: bool,
pub url: String,
#[serde(default)]
pub cname_target: Option<String>,
#[serde(default)]
pub dns_label: Option<String>,
#[serde(default)]
pub verification_error: Option<String>,
#[serde(default)]
pub steps: Option<Vec<DomainStep>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DomainStep {
pub name: String,
pub state: String,
pub detail: String,
}
fn enabled_by_default() -> bool {
true
}
#[derive(Debug, Serialize, Deserialize)]
pub struct UsagePage {
pub samples: Vec<UsageSample>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UsageSample {
pub at: String,
pub cpu_millicores: u32,
pub memory_bytes: u64,
pub memory_limit_bytes: u64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TokenCounts {
#[serde(default)]
pub input_tokens: u64,
#[serde(default)]
pub output_tokens: u64,
#[serde(default)]
pub cache_read_tokens: u64,
#[serde(default)]
pub cache_creation_tokens: u64,
}
impl TokenCounts {
pub fn total(&self) -> u64 {
self.input_tokens + self.output_tokens + self.cache_read_tokens + self.cache_creation_tokens
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UsageTotals {
#[serde(default)]
pub prompts: u64,
#[serde(default)]
pub cost_micros: u64,
#[serde(default)]
pub duration_millis: u64,
#[serde(default)]
pub average_cost_micros: u64,
#[serde(flatten)]
pub tokens: TokenCounts,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UsagePrompt {
pub id: String,
pub at: String,
pub model: String,
#[serde(default)]
pub cost_micros: u64,
#[serde(default)]
pub duration_ms: u64,
#[serde(default)]
pub turns: u32,
#[serde(flatten)]
pub tokens: TokenCounts,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ConsumptionPage {
pub range: String,
pub available: bool,
pub totals: UsageTotals,
pub lifetime: UsageTotals,
#[serde(default)]
pub since: Option<String>,
#[serde(default)]
pub recent: Vec<UsagePrompt>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct OutcomeCounts {
#[serde(default)]
pub answered: u64,
#[serde(default)]
pub failed: u64,
#[serde(default)]
pub rejected: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AgentRequest {
pub id: String,
pub at: String,
pub model: String,
pub outcome: String,
#[serde(default)]
pub detail: Option<String>,
#[serde(default)]
pub route: String,
#[serde(default)]
pub prompt_excerpt: String,
#[serde(default)]
pub prompt_chars: u64,
#[serde(default)]
pub images: u32,
#[serde(default)]
pub queued_ms: u64,
#[serde(default)]
pub duration_ms: u64,
#[serde(default)]
pub turns: u32,
#[serde(default)]
pub cost_micros: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LiveRequest {
pub id: String,
#[serde(default)]
pub route: String,
#[serde(default)]
pub model: String,
#[serde(default)]
pub prompt_excerpt: String,
#[serde(default)]
pub started_at: Option<String>,
pub waiting_since: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LiveView {
#[serde(default)]
pub running: u32,
#[serde(default)]
pub queued: u32,
#[serde(default)]
pub max_concurrent: u32,
#[serde(default)]
pub max_queued: u32,
#[serde(default)]
pub requests: Vec<LiveRequest>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AgentActivityPage {
pub range: String,
pub available: bool,
#[serde(default)]
pub counts: OutcomeCounts,
#[serde(default)]
pub requests: u64,
#[serde(default)]
pub answered_percent: u32,
#[serde(default)]
pub entries: Vec<AgentRequest>,
#[serde(default)]
pub live: Option<LiveView>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct AutofixPage {
pub runs: Vec<AutofixRun>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AutofixRun {
pub id: String,
pub status: String,
pub step: String,
pub model: String,
#[serde(default)]
pub diagnosis: Option<String>,
#[serde(default, rename = "pullRequestUrl")]
pub pull_request_url: Option<String>,
#[serde(default, rename = "costMicros")]
pub cost_micros: i64,
#[serde(default, rename = "failureMessage")]
pub failure_message: Option<String>,
#[serde(rename = "startedAt")]
pub started_at: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct IncidentsPage {
pub incidents: Vec<Incident>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Incident {
pub id: String,
pub shape: String,
#[serde(default, rename = "sampleMessage")]
pub sample_message: String,
pub level: String,
pub occurrences: u64,
#[serde(rename = "firstSeenAt")]
pub first_seen_at: String,
#[serde(rename = "lastSeenAt")]
pub last_seen_at: String,
#[serde(default, rename = "lastTraceId")]
pub last_trace_id: Option<String>,
pub status: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct RepositoryAccessPage {
#[serde(default)]
pub request: Option<RepositoryAccessRequest>,
#[serde(default)]
pub history: Vec<RepositoryAccessRequest>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RepositoryAccessRequest {
pub id: String,
#[serde(rename = "repoFullName")]
pub repo_full_name: String,
#[serde(rename = "ownerLogin")]
pub owner_login: String,
#[serde(default, rename = "ownerName")]
pub owner_name: Option<String>,
#[serde(default, rename = "installedOnAccount")]
pub installed_on_account: bool,
#[serde(default)]
pub email: Option<String>,
pub state: String,
#[serde(rename = "detectedAt")]
pub detected_at: String,
#[serde(default, rename = "sentAt")]
pub sent_at: Option<String>,
#[serde(default, rename = "openedAt")]
pub opened_at: Option<String>,
#[serde(default, rename = "grantedAt")]
pub granted_at: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SentRepositoryAccess {
pub request: RepositoryAccessRequest,
#[serde(rename = "approveUrl")]
pub approve_url: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ApprovalsPage {
pub approvals: Vec<Approval>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Approval {
pub id: String,
#[serde(rename = "serviceEnvironmentId")]
pub service_environment_id: String,
#[serde(rename = "commitSha")]
pub commit_sha: String,
#[serde(default, rename = "commitSubject")]
pub commit_subject: Option<String>,
#[serde(default, rename = "authorLogin")]
pub author_login: Option<String>,
pub reason: String,
pub state: String,
#[serde(rename = "requestedAt")]
pub requested_at: String,
#[serde(default, rename = "deploymentId")]
pub deployment_id: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct LogPage {
pub lines: Vec<LogLine>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LogLine {
pub sequence: u64,
#[serde(default)]
pub at: Option<String>,
#[serde(default)]
pub stream: String,
#[serde(default)]
pub level: String,
pub message: String,
#[serde(default)]
pub stage: Option<String>,
#[serde(default, rename = "traceId")]
pub trace_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct InfraEvent {
pub kind: String,
#[serde(default)]
pub project_id: String,
#[serde(default)]
pub service_environment_id: Option<String>,
#[serde(default)]
pub deployment_id: Option<String>,
#[serde(default)]
pub status: Option<String>,
#[serde(default)]
pub state: Option<String>,
#[serde(default)]
pub trigger: Option<String>,
#[serde(default)]
pub number: Option<u32>,
#[serde(default)]
pub service_name: Option<String>,
#[serde(default)]
pub commit_sha: Option<String>,
#[serde(default)]
pub commit_subject: Option<String>,
#[serde(default)]
pub key: Option<String>,
#[serde(default)]
pub action: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ConnectionCandidates {
pub candidates: Vec<ConnectionCandidate>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ConnectionCandidate {
pub id: String,
pub name: String,
pub summary: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ConnectionMade {
pub connection: Connection,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Connection {
pub provider_name: String,
pub keys: Vec<String>,
pub summary: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TemplatesPage {
pub templates: Vec<Template>,
#[serde(default)]
pub categories: Vec<TemplateCategory>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TemplateCategory {
pub id: String,
pub label: String,
pub summary: String,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Template {
pub key: String,
pub display_name: String,
pub image: String,
#[serde(default)]
pub category: String,
#[serde(default)]
pub summary: String,
#[serde(default)]
pub memory_mb: u32,
#[serde(default)]
pub setup: Option<ClaudeCodeSetupOffer>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ClaudeOption {
pub id: String,
pub label: String,
#[serde(default)]
pub summary: String,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ClaudeCodeSetupOffer {
#[serde(default)]
pub models: Vec<ClaudeOption>,
#[serde(default)]
pub efforts: Vec<ClaudeOption>,
#[serde(default)]
pub default_model: String,
#[serde(default)]
pub default_effort: String,
#[serde(default)]
pub token_optional: bool,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AgentSetup {
pub model: String,
pub effort: String,
pub credential: AgentCredential,
#[serde(default)]
pub token_optional: bool,
#[serde(default)]
pub models: Vec<ClaudeOption>,
#[serde(default)]
pub efforts: Vec<ClaudeOption>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AgentCredential {
pub configured: bool,
#[serde(default)]
pub sealed: bool,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AgentSetupPatch {
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub effort: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub setup_token: Option<String>,
}
impl AgentSetupPatch {
pub fn is_empty(&self) -> bool {
self.model.is_none() && self.effort.is_none() && self.setup_token.is_none()
}
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ClaudeCodeSetupRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub setup_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub effort: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StartedAuthorization {
pub user_code: String,
pub device_secret: String,
pub verification_uri: String,
pub verification_uri_complete: String,
pub interval_seconds: u64,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CollectedAuthorization {
pub status: String,
#[serde(default)]
pub token: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ServerVersion {
pub platform: String,
#[serde(default)]
pub revision: Option<String>,
#[serde(default)]
pub modules: std::collections::BTreeMap<String, String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Principal {
pub principal: Option<PrincipalIdentity>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PrincipalIdentity {
pub id: String,
pub display_name: String,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct NewService {
pub name: String,
pub source_kind: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub repo_full_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub branch: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub image: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub template_key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub kind: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub connect_to: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub deploy_now: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub claude: Option<ClaudeCodeSetupRequest>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct WorkspacesPage {
pub workspaces: Vec<Workspace>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Workspace {
pub id: String,
pub name: String,
pub slug: String,
#[serde(default)]
pub role: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct MembersPage {
pub members: Vec<Member>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Credits {
pub balance_micros: i64,
pub added_micros: i64,
pub spent_micros: i64,
#[serde(default)]
pub last_top_up_at: Option<String>,
#[serde(default)]
pub remaining_percent: Option<i64>,
#[serde(default)]
pub running_low: bool,
#[serde(default)]
pub may_run_agent: bool,
#[serde(default)]
pub packs: Vec<CreditPack>,
#[serde(default)]
pub history: Vec<CreditEntry>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreditPack {
pub key: String,
pub label: String,
pub price_cents: i64,
pub credit_micros: i64,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreditEntry {
pub id: String,
pub kind: String,
pub amount_micros: i64,
pub detail: String,
pub created_at: String,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Member {
pub user_id: String,
pub role: String,
#[serde(default)]
pub display_name: Option<String>,
#[serde(default)]
pub github_login: Option<String>,
#[serde(default)]
pub email: Option<String>,
#[serde(default)]
pub last_seen_at: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ActivityPage {
pub activity: Vec<ActivityEntry>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ActivityEntry {
pub id: String,
pub summary: String,
#[serde(default)]
pub category: String,
pub at: String,
pub actor: ActivityActor,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ActivityActor {
pub id: String,
#[serde(default)]
pub kind: Option<String>,
#[serde(default)]
pub display_name: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct InvitationsPage {
pub invitations: Vec<Invitation>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Invitation {
pub id: String,
pub email: String,
pub role: String,
pub status: String,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SentInvitation {
pub accept_url: String,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct NewInvitation {
pub email: String,
pub role: String,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Capacity {
pub total_memory_mb: u64,
#[serde(default)]
pub used_memory_mb: Option<u64>,
pub reserved_memory_mb: u64,
pub committed_memory_mb: u64,
pub available_memory_mb: u64,
pub ports_in_use: u32,
pub ports_total: u32,
pub remaining_at_default_size: u32,
pub running_low: bool,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct EncryptionOutcome {
pub enabled: bool,
pub buckets: Vec<String>,
pub re_encrypted: u32,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ExposureOutcome {
pub domains: Vec<Domain>,
}
#[derive(Debug, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SettingsPatch {
#[serde(skip_serializing_if = "Option::is_none")]
pub memory_mb: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub replicas: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub root_directory: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start_command: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub health_path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub health_probe: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub health_timeout_seconds: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub health_interval_seconds: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub health_grace_seconds: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub health_expected_status: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub restart_policy: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub restart_max_retries: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sleep_enabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sleep_after_minutes: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub auto_deploy: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cache_enabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cache_ttl_seconds: Option<u32>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct VolumesPage {
pub volumes: Vec<Volume>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct VolumeAttached {
pub volume: Volume,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Volume {
pub id: String,
pub name: String,
pub mount_path: String,
#[serde(default)]
pub mounted: bool,
#[serde(default)]
pub size_limit_mb: u64,
#[serde(default)]
pub used_bytes: u64,
#[serde(default)]
pub measured_at: Option<String>,
#[serde(default)]
pub occupancy_percent: Option<u32>,
#[serde(default)]
pub created_at: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Recipe {
pub builder: String,
pub source: String,
pub containerfile: String,
#[serde(default)]
pub exposed_port: Option<u32>,
#[serde(default)]
pub notes: Vec<String>,
#[serde(default)]
pub warnings: Vec<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EditedRecipe {
pub source: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ProjectCreated {
pub project: Project,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Disconnected {
#[serde(default)]
pub removed: Vec<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ImportedVariables {
#[serde(default)]
pub imported: u32,
}
#[derive(Debug, Serialize)]
pub struct VariableDraft {
pub key: String,
pub value: String,
pub secret: bool,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ServiceConfigPage {
pub config: ServiceConfig,
#[serde(default)]
pub stale_targets: Vec<String>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ServiceConfig {
pub format: String,
pub container_path: String,
pub source: String,
pub content: String,
#[serde(default)]
pub warnings: Vec<String>,
#[serde(default)]
pub edited_at: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ServiceConfigResponse {
pub config: ServiceConfig,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SignIn {
pub id: String,
pub at: String,
pub method: String,
pub outcome: String,
pub client_address: String,
#[serde(default)]
pub device: Option<String>,
#[serde(default)]
pub detail: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SignInPage {
#[serde(rename = "signIns")]
pub sign_ins: Vec<SignIn>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AuthSession {
pub id: String,
pub created_at: String,
pub last_seen_at: String,
#[serde(default)]
pub client_address: Option<String>,
#[serde(default)]
pub device: Option<String>,
#[serde(default)]
pub current: bool,
#[serde(default)]
pub pending: bool,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AuthSessionPage {
pub sessions: Vec<AuthSession>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CommitChangeResponse {
#[serde(default)]
pub commit: Option<CommitChange>,
#[serde(default)]
pub unavailable: Option<CommitUnavailable>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CommitUnavailable {
pub reason: String,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CommitChange {
pub sha: String,
pub subject: String,
#[serde(default)]
pub body: Option<String>,
#[serde(default)]
pub author: Option<CommitAccount>,
#[serde(default)]
pub author_name: Option<String>,
#[serde(default)]
pub committed_at: Option<String>,
#[serde(default)]
pub html_url: Option<String>,
#[serde(default)]
pub parents: Vec<String>,
pub repo_full_name: String,
pub additions: u32,
pub deletions: u32,
#[serde(default)]
pub truncated: bool,
pub files: Vec<CommitFile>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CommitAccount {
pub login: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CommitFile {
pub path: String,
#[serde(default)]
pub previous_path: Option<String>,
pub status: String,
pub additions: u32,
pub deletions: u32,
#[serde(default)]
pub patch: Option<String>,
}