Skip to main content

agent_deploy_contract/
runtime_template.rs

1use 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}