Skip to main content

daytona_client/models/
snapshot.rs

1//! Snapshot management models
2
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5use uuid::Uuid;
6
7use crate::models::BuildInfo;
8
9/// Snapshot state enumeration
10#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
11#[serde(rename_all = "snake_case")]
12pub enum SnapshotState {
13    BuildPending,
14    Building,
15    Pending,
16    Pulling,
17    PendingValidation,
18    Validating,
19    Active,
20    Inactive,
21    Error,
22    BuildFailed,
23    Removing,
24}
25
26/// Snapshot information
27#[derive(Debug, Clone, Serialize, Deserialize)]
28#[serde(rename_all = "camelCase")]
29pub struct SnapshotDto {
30    pub id: Uuid,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub organization_id: Option<Uuid>,
33    pub general: bool,
34    pub name: String,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub image_name: Option<String>,
37    pub state: SnapshotState,
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub size: Option<f64>,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub entrypoint: Option<Vec<String>>,
42    pub cpu: f32,
43    pub gpu: f32,
44    pub mem: u32,
45    pub disk: u32,
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub error_reason: Option<String>,
48    pub created_at: DateTime<Utc>,
49    pub updated_at: DateTime<Utc>,
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub last_used_at: Option<DateTime<Utc>>,
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub build_info: Option<BuildInfo>,
54}
55
56/// Create snapshot request
57#[derive(Debug, Clone, Serialize, Deserialize)]
58#[serde(rename_all = "camelCase")]
59pub struct CreateSnapshotRequest {
60    pub name: String,
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub image_name: Option<String>,
63    #[serde(skip_serializing_if = "Option::is_none")]
64    pub entrypoint: Option<Vec<String>>,
65    #[serde(skip_serializing_if = "Option::is_none")]
66    pub general: Option<bool>,
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub cpu: Option<f32>,
69    #[serde(skip_serializing_if = "Option::is_none")]
70    pub gpu: Option<f32>,
71    #[serde(skip_serializing_if = "Option::is_none")]
72    pub memory: Option<u32>,
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub disk: Option<u32>,
75    #[serde(skip_serializing_if = "Option::is_none")]
76    pub build_info: Option<crate::models::CreateBuildInfo>,
77}
78
79/// Paginated snapshots response
80#[derive(Debug, Clone, Serialize, Deserialize)]
81#[serde(rename_all = "camelCase")]
82pub struct PaginatedSnapshots {
83    pub items: Vec<SnapshotDto>,
84    pub total: u32,
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub page: Option<u32>,
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub limit: Option<u32>,
89    #[serde(skip_serializing_if = "Option::is_none")]
90    pub has_next: Option<bool>,
91}