posemesh_compute_node/dms/
types.rs

1use chrono::{DateTime, Utc};
2use compute_runner_api::TaskSpec;
3use serde::{Deserialize, Serialize};
4use url::Url;
5use uuid::Uuid;
6
7/// Alias for the lease envelope as returned by DMS.
8pub type LeaseResponse = compute_runner_api::LeaseEnvelope;
9/// Heartbeat responses provide incremental lease updates.
10#[derive(Debug, Clone, Serialize, Deserialize, Default)]
11pub struct HeartbeatResponse {
12    #[serde(default)]
13    pub access_token: Option<String>,
14    #[serde(default)]
15    pub access_token_expires_at: Option<DateTime<Utc>>,
16    #[serde(default)]
17    pub lease_expires_at: Option<DateTime<Utc>>,
18    #[serde(default)]
19    pub cancel: Option<bool>,
20    #[serde(default)]
21    pub status: Option<String>,
22    #[serde(default)]
23    pub domain_id: Option<Uuid>,
24    #[serde(default)]
25    pub domain_server_url: Option<Url>,
26    #[serde(default)]
27    pub task: Option<TaskSpec>,
28    #[serde(default)]
29    pub task_id: Option<Uuid>,
30    #[serde(default)]
31    pub job_id: Option<Uuid>,
32    #[serde(default)]
33    pub attempts: Option<u64>,
34    #[serde(default)]
35    pub max_attempts: Option<u64>,
36    #[serde(default)]
37    pub deps_remaining: Option<u64>,
38}
39
40/// Heartbeat request payload (progress and optional events).
41#[derive(Debug, Clone, Serialize, Deserialize, Default)]
42pub struct HeartbeatRequest {
43    pub progress: serde_json::Value,
44    #[serde(default)]
45    pub events: serde_json::Value,
46}
47
48/// Complete task request payload (shape is intentionally minimal here).
49#[derive(Debug, Clone, Serialize, Deserialize, Default)]
50pub struct CompleteTaskRequest {
51    pub outputs_index: serde_json::Value,
52    pub result: serde_json::Value,
53}
54
55/// Fail task request payload.
56#[derive(Debug, Clone, Serialize, Deserialize, Default)]
57pub struct FailTaskRequest {
58    pub reason: String,
59    #[serde(default)]
60    pub details: serde_json::Value,
61}