agent_deploy_contract/
runtime_template.rs1use serde::{Deserialize, Serialize};
2
3use crate::CursorPage;
4
5pub const RUNTIME_TEMPLATE_GIT_REF: &str = "master";
6
7pub type RuntimeTemplatePage = CursorPage<RuntimeTemplate>;
8
9#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
10#[serde(rename_all = "camelCase")]
11pub struct RuntimeTemplate {
12 pub id: String,
13 pub name: String,
14 pub repository_url: String,
15 pub git_ref: String,
16 pub subdirectory: Option<String>,
17 pub description: Option<String>,
18 pub enabled: bool,
19 pub version: i64,
20 pub created_at: String,
21 pub updated_at: String,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
25#[serde(rename_all = "camelCase")]
26pub struct CreateRuntimeTemplateRequest {
27 pub name: String,
28 pub repository_url: String,
29 #[serde(default = "default_git_ref")]
30 pub git_ref: String,
31 pub subdirectory: Option<String>,
32 pub description: Option<String>,
33 #[serde(default = "enabled_by_default")]
34 pub enabled: bool,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
38#[serde(rename_all = "camelCase")]
39pub struct UpdateRuntimeTemplateRequest {
40 pub name: String,
41 pub repository_url: String,
42 #[serde(default = "default_git_ref")]
43 pub git_ref: String,
44 pub subdirectory: Option<String>,
45 pub description: Option<String>,
46 pub enabled: bool,
47 pub expected_version: i64,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
51#[serde(rename_all = "camelCase")]
52pub struct DeleteRuntimeTemplateRequest {
53 pub expected_version: i64,
54}
55
56#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq)]
57#[serde(rename_all = "snake_case")]
58pub enum GitLabVisibility {
59 #[default]
60 Private,
61 Internal,
62 Public,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
66#[serde(rename_all = "camelCase")]
67pub struct InitializeRuntimeTemplateRequest {
68 #[serde(default)]
69 pub namespace: String,
70 pub project_name: String,
71 pub project_path: Option<String>,
72 pub description: Option<String>,
73 #[serde(default)]
74 pub visibility: GitLabVisibility,
75}
76
77#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
78#[serde(rename_all = "camelCase")]
79pub struct RuntimeRepository {
80 pub project_id: u64,
81 pub path_with_namespace: String,
82 pub repository_url: String,
83 pub default_branch: Option<String>,
84 #[serde(default)]
85 pub status: crate::RuntimeRepositoryStatus,
86 #[serde(default, skip_serializing_if = "Option::is_none")]
87 pub error_message: Option<String>,
88}
89
90fn default_git_ref() -> String {
91 RUNTIME_TEMPLATE_GIT_REF.to_string()
92}
93
94const fn enabled_by_default() -> bool {
95 true
96}
97
98#[cfg(test)]
99mod tests {
100 use super::*;
101
102 #[test]
103 fn create_template_defaults_git_ref_to_master() {
104 let request: CreateRuntimeTemplateRequest = serde_json::from_value(serde_json::json!({
105 "name": "rust-runtime",
106 "repositoryUrl": "https://git.test/templates/rust.git"
107 }))
108 .unwrap();
109 assert_eq!(request.git_ref, "master");
110 assert!(request.enabled);
111 }
112
113 #[test]
114 fn update_template_defaults_git_ref_to_master() {
115 let request: UpdateRuntimeTemplateRequest = serde_json::from_value(serde_json::json!({
116 "name": "rust-runtime",
117 "repositoryUrl": "https://git.test/templates/rust.git",
118 "enabled": true,
119 "expectedVersion": 1
120 }))
121 .unwrap();
122 assert_eq!(request.git_ref, "master");
123 }
124}