use serde::{Deserialize, Serialize};
use crate::CursorPage;
pub const RUNTIME_TEMPLATE_GIT_REF: &str = "master";
pub type RuntimeTemplatePage = CursorPage<RuntimeTemplate>;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct RuntimeTemplate {
pub id: String,
pub name: String,
pub repository_url: String,
pub git_ref: String,
pub subdirectory: Option<String>,
pub description: Option<String>,
pub enabled: bool,
pub version: i64,
pub created_at: String,
pub updated_at: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct CreateRuntimeTemplateRequest {
pub name: String,
pub repository_url: String,
#[serde(default = "default_git_ref")]
pub git_ref: String,
pub subdirectory: Option<String>,
pub description: Option<String>,
#[serde(default = "enabled_by_default")]
pub enabled: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct UpdateRuntimeTemplateRequest {
pub name: String,
pub repository_url: String,
#[serde(default = "default_git_ref")]
pub git_ref: String,
pub subdirectory: Option<String>,
pub description: Option<String>,
pub enabled: bool,
pub expected_version: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct DeleteRuntimeTemplateRequest {
pub expected_version: i64,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum GitLabVisibility {
#[default]
Private,
Internal,
Public,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct InitializeRuntimeTemplateRequest {
#[serde(default)]
pub namespace: String,
pub project_name: String,
pub project_path: Option<String>,
pub description: Option<String>,
#[serde(default)]
pub visibility: GitLabVisibility,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct RuntimeRepository {
pub project_id: u64,
pub path_with_namespace: String,
pub repository_url: String,
pub default_branch: Option<String>,
#[serde(default)]
pub status: crate::RuntimeRepositoryStatus,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub error_message: Option<String>,
}
fn default_git_ref() -> String {
RUNTIME_TEMPLATE_GIT_REF.to_string()
}
const fn enabled_by_default() -> bool {
true
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn create_template_defaults_git_ref_to_master() {
let request: CreateRuntimeTemplateRequest = serde_json::from_value(serde_json::json!({
"name": "rust-runtime",
"repositoryUrl": "https://git.test/templates/rust.git"
}))
.unwrap();
assert_eq!(request.git_ref, "master");
assert!(request.enabled);
}
#[test]
fn update_template_defaults_git_ref_to_master() {
let request: UpdateRuntimeTemplateRequest = serde_json::from_value(serde_json::json!({
"name": "rust-runtime",
"repositoryUrl": "https://git.test/templates/rust.git",
"enabled": true,
"expectedVersion": 1
}))
.unwrap();
assert_eq!(request.git_ref, "master");
}
}