agent_workspace_contract/environment/
managed_workloads.rs1use serde::{Deserialize, Serialize};
4
5use crate::{CommandSpec, ResourceScope};
6
7pub const MANAGED_WORKLOADS_PATH: &str = "/internal/v1/workspace/managed-workloads";
8pub const MANAGED_WORKLOAD_PATH: &str = "/internal/v1/workspace/managed-workloads/{workloadId}";
9pub const MANAGED_WORKLOAD_STOP_PATH: &str =
10 "/internal/v1/workspace/managed-workloads/{workloadId}/stop";
11
12#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
13#[serde(rename_all = "snake_case")]
14pub enum ManagedWorkloadIsolation {
15 Direct,
16 Sandbox,
17}
18
19#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
20#[serde(rename_all = "snake_case")]
21pub enum ManagedWorkloadState {
22 Running,
23 Ready,
24 Succeeded,
25 Failed,
26 Stopping,
27 Stopped,
28}
29
30#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
31#[serde(deny_unknown_fields, rename_all = "camelCase")]
32pub struct CreateManagedWorkloadRequest {
33 pub runtime_id: String,
34 pub computer_id: String,
35 pub space_id: String,
36 pub isolation: ManagedWorkloadIsolation,
37 #[serde(default, skip_serializing_if = "Option::is_none")]
38 pub template_id: Option<String>,
39 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub template_version: Option<String>,
41 pub bundle_digest: String,
42 #[serde(with = "super::base64_bytes")]
43 pub bundle_content: Vec<u8>,
44 pub readiness_path: String,
45 #[serde(default, skip_serializing_if = "Vec::is_empty")]
47 pub preview_ports: Vec<u16>,
48 pub command: CommandSpec,
49}
50
51#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
52#[serde(deny_unknown_fields, rename_all = "camelCase")]
53pub struct ManagedWorkload {
54 pub id: String,
55 pub scope: ResourceScope,
56 pub runtime_id: String,
57 pub computer_id: String,
58 pub space_id: String,
59 pub isolation: ManagedWorkloadIsolation,
60 #[serde(default, skip_serializing_if = "Option::is_none")]
61 pub template_id: Option<String>,
62 #[serde(default, skip_serializing_if = "Option::is_none")]
63 pub template_version: Option<String>,
64 pub bundle_digest: String,
65 pub bundle_path: String,
66 pub readiness_path: String,
67 pub command_id: String,
68 pub command: CommandSpec,
69 #[serde(default, skip_serializing_if = "Option::is_none")]
70 pub sandbox_id: Option<String>,
71 pub state: ManagedWorkloadState,
72 pub revision: u64,
73 pub created_at_ms: u64,
74 pub updated_at_ms: u64,
75}
76
77#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
78#[serde(deny_unknown_fields, rename_all = "camelCase")]
79pub struct ManagedWorkloadResource {
80 pub id: String,
81 pub runtime_id: String,
82 pub computer_id: String,
83 pub space_id: String,
84 pub isolation: ManagedWorkloadIsolation,
85 #[serde(default, skip_serializing_if = "Option::is_none")]
86 pub template_id: Option<String>,
87 #[serde(default, skip_serializing_if = "Option::is_none")]
88 pub template_version: Option<String>,
89 pub bundle_digest: String,
90 pub bundle_path: String,
91 pub readiness_path: String,
92 pub command_id: String,
93 #[serde(default, skip_serializing_if = "Option::is_none")]
94 pub sandbox_id: Option<String>,
95 pub state: ManagedWorkloadState,
96 pub revision: u64,
97 pub created_at_ms: u64,
98 pub updated_at_ms: u64,
99}
100
101impl From<ManagedWorkload> for ManagedWorkloadResource {
102 fn from(record: ManagedWorkload) -> Self {
103 Self {
104 id: record.id,
105 runtime_id: record.runtime_id,
106 computer_id: record.computer_id,
107 space_id: record.space_id,
108 isolation: record.isolation,
109 template_id: record.template_id,
110 template_version: record.template_version,
111 bundle_digest: record.bundle_digest,
112 bundle_path: record.bundle_path,
113 readiness_path: record.readiness_path,
114 command_id: record.command_id,
115 sandbox_id: record.sandbox_id,
116 state: record.state,
117 revision: record.revision,
118 created_at_ms: record.created_at_ms,
119 updated_at_ms: record.updated_at_ms,
120 }
121 }
122}