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_databases: Option<Vec<String>>,
23    pub include_tables: Option<Vec<String>>,
24    pub exclude_tables: Option<Vec<String>>,
25}
26
27#[derive(Debug, Clone, Deserialize)]
28pub struct JobResponse {
29    pub job_id: String,
30    pub status: String,
31}
32
33#[derive(Debug, Clone, Deserialize)]
34pub struct JobStatus {
35    pub job_id: String,
36    pub status: String, // "provisioning", "running", "completed", "failed"
37    pub created_at: Option<String>,
38    pub started_at: Option<String>,
39    pub completed_at: Option<String>,
40    pub progress: Option<ProgressInfo>,
41    pub error: Option<String>,
42}
43
44#[derive(Debug, Clone, Deserialize)]
45pub struct ProgressInfo {
46    pub current_database: Option<String>,
47    pub databases_completed: usize,
48    pub databases_total: usize,
49    pub message: Option<String>,
50}