use serde::{Deserialize, Serialize};
use crate::{CommandSpec, ResourceScope};
pub const MANAGED_WORKLOADS_PATH: &str = "/internal/v1/workspace/managed-workloads";
pub const MANAGED_WORKLOAD_PATH: &str = "/internal/v1/workspace/managed-workloads/{workloadId}";
pub const MANAGED_WORKLOAD_STOP_PATH: &str =
"/internal/v1/workspace/managed-workloads/{workloadId}/stop";
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ManagedWorkloadIsolation {
Direct,
Sandbox,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ManagedWorkloadState {
Running,
Ready,
Succeeded,
Failed,
Stopping,
Stopped,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct CreateManagedWorkloadRequest {
pub runtime_id: String,
pub computer_id: String,
pub space_id: String,
pub isolation: ManagedWorkloadIsolation,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub template_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub template_version: Option<String>,
pub bundle_digest: String,
#[serde(with = "super::base64_bytes")]
pub bundle_content: Vec<u8>,
pub readiness_path: String,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub preview_ports: Vec<u16>,
pub command: CommandSpec,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct ManagedWorkload {
pub id: String,
pub scope: ResourceScope,
pub runtime_id: String,
pub computer_id: String,
pub space_id: String,
pub isolation: ManagedWorkloadIsolation,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub template_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub template_version: Option<String>,
pub bundle_digest: String,
pub bundle_path: String,
pub readiness_path: String,
pub command_id: String,
pub command: CommandSpec,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sandbox_id: Option<String>,
pub state: ManagedWorkloadState,
pub revision: u64,
pub created_at_ms: u64,
pub updated_at_ms: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct ManagedWorkloadResource {
pub id: String,
pub runtime_id: String,
pub computer_id: String,
pub space_id: String,
pub isolation: ManagedWorkloadIsolation,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub template_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub template_version: Option<String>,
pub bundle_digest: String,
pub bundle_path: String,
pub readiness_path: String,
pub command_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sandbox_id: Option<String>,
pub state: ManagedWorkloadState,
pub revision: u64,
pub created_at_ms: u64,
pub updated_at_ms: u64,
}
impl From<ManagedWorkload> for ManagedWorkloadResource {
fn from(record: ManagedWorkload) -> Self {
Self {
id: record.id,
runtime_id: record.runtime_id,
computer_id: record.computer_id,
space_id: record.space_id,
isolation: record.isolation,
template_id: record.template_id,
template_version: record.template_version,
bundle_digest: record.bundle_digest,
bundle_path: record.bundle_path,
readiness_path: record.readiness_path,
command_id: record.command_id,
sandbox_id: record.sandbox_id,
state: record.state,
revision: record.revision,
created_at_ms: record.created_at_ms,
updated_at_ms: record.updated_at_ms,
}
}
}