database_replicator/remote/
models.rs

1// ABOUTME: Data structures for remote job specifications and responses
2// ABOUTME: These are serialized to JSON for API communication
3
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct JobSpec {
9    #[serde(rename = "schema_version")]
10    pub version: String,
11    pub command: String, // "init" or "sync"
12    pub source_url: String,
13    pub target_url: String,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub filter: Option<FilterSpec>,
16    pub options: HashMap<String, serde_json::Value>,
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct FilterSpec {
21    pub include_databases: Option<Vec<String>>,
22    pub exclude_tables: Option<Vec<String>>,
23}
24
25#[derive(Debug, Clone, Deserialize)]
26pub struct JobResponse {
27    pub job_id: String,
28    pub status: String,
29}
30
31#[derive(Debug, Clone, Deserialize)]
32pub struct JobStatus {
33    pub job_id: String,
34    pub status: String, // "provisioning", "running", "completed", "failed"
35    pub created_at: Option<String>,
36    pub started_at: Option<String>,
37    pub completed_at: Option<String>,
38    pub progress: Option<ProgressInfo>,
39    pub error: Option<String>,
40}
41
42#[derive(Debug, Clone, Deserialize)]
43pub struct ProgressInfo {
44    pub current_database: Option<String>,
45    pub databases_completed: usize,
46    pub databases_total: usize,
47    pub message: Option<String>,
48}