runpod_sdk/serverless/
types.rs1use serde::{Deserialize, Serialize};
4#[cfg(feature = "strum")]
5use strum::{Display, EnumString};
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
11#[cfg_attr(feature = "strum", derive(Display, EnumString))]
12#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
13#[cfg_attr(feature = "strum", strum(serialize_all = "SCREAMING_SNAKE_CASE"))]
14pub enum JobStatus {
15 InQueue,
17 InProgress,
19 Completed,
21 Failed,
23 TimedOut,
25 Cancelled,
27}
28
29impl JobStatus {
30 pub fn is_final(&self) -> bool {
32 matches!(
33 self,
34 JobStatus::Completed | JobStatus::Failed | JobStatus::TimedOut | JobStatus::Cancelled
35 )
36 }
37
38 pub fn is_completed(&self) -> bool {
40 matches!(self, JobStatus::Completed)
41 }
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize)]
46#[serde(rename_all = "camelCase")]
47pub struct JobStatusResponse {
48 pub status: JobStatus,
50 #[serde(skip_serializing_if = "Option::is_none")]
52 pub output: Option<serde_json::Value>,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct StreamResponse {
58 pub status: JobStatus,
60 #[serde(default)]
62 pub stream: Vec<StreamChunk>,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize)]
67pub struct StreamChunk {
68 pub output: serde_json::Value,
70}
71
72pub type JobOutput = serde_json::Value;
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
77pub struct EndpointHealth {
78 pub jobs: JobStats,
80 pub workers: WorkerStats,
82}
83
84#[derive(Debug, Clone, Serialize, Deserialize)]
86#[serde(rename_all = "camelCase")]
87pub struct JobStats {
88 pub completed: u32,
90 pub failed: u32,
92 pub in_progress: u32,
94 pub in_queue: u32,
96 pub retried: u32,
98}
99
100#[derive(Debug, Clone, Serialize, Deserialize)]
102pub struct WorkerStats {
103 pub idle: u32,
105 pub initializing: u32,
107 pub ready: u32,
109 pub running: u32,
111 pub throttled: u32,
113}
114
115#[derive(Debug, Clone, Serialize, Deserialize)]
117pub struct RunRequest {
118 pub input: serde_json::Value,
120}
121
122#[derive(Debug, Clone, Serialize, Deserialize)]
124pub struct RunResponse {
125 pub id: String,
127 #[serde(skip_serializing_if = "Option::is_none")]
129 pub status: Option<JobStatus>,
130 #[serde(skip_serializing_if = "Option::is_none")]
132 pub output: Option<serde_json::Value>,
133}