1use std::collections::HashMap;
4
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
12#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
13#[serde(rename_all = "camelCase")]
14pub struct HorizonClusterConfig {
15 pub cluster_id: String,
17
18 pub management_token: String,
21}
22
23#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
25#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
26#[serde(rename_all = "camelCase")]
27pub enum HorizonMachineArchitecture {
28 #[serde(rename = "arm64")]
30 Arm64,
31 #[serde(rename = "amd64")]
33 Amd64,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
38#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
39#[serde(rename_all = "camelCase")]
40pub struct HorizonAwsMachineImages {
41 pub amis: HashMap<HorizonMachineArchitecture, HashMap<String, String>>,
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
47#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
48#[serde(rename_all = "camelCase")]
49pub struct HorizonGcpMachineImage {
50 pub source_image: String,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
56#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
57#[serde(rename_all = "camelCase")]
58pub struct HorizonGcpMachineImages {
59 pub images: HashMap<HorizonMachineArchitecture, HorizonGcpMachineImage>,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
65#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
66#[serde(rename_all = "camelCase")]
67pub struct HorizonAzureMachineImage {
68 pub image_version_id: String,
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
74#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
75#[serde(rename_all = "camelCase")]
76pub struct HorizonMachineBaseImage {
77 pub name: String,
79 pub version: String,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
85#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
86#[serde(rename_all = "camelCase")]
87pub struct HorizonAzureMachineImages {
88 pub images: HashMap<HorizonMachineArchitecture, HorizonAzureMachineImage>,
90}
91
92#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
94#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
95#[serde(rename_all = "camelCase")]
96pub struct HorizondArtifact {
97 pub url: String,
99 pub sha256: String,
101}
102
103#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
107#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
108#[serde(rename_all = "camelCase")]
109pub struct HorizonMachineImage {
110 pub channel: String,
112 pub machine_image_version: String,
114 pub horizond_version: String,
116 pub git_sha: String,
118 pub created_at: String,
120 pub base_image: HorizonMachineBaseImage,
122 pub horizond_artifacts: HashMap<String, HorizondArtifact>,
124 #[serde(default, skip_serializing_if = "Option::is_none")]
126 pub aws: Option<HorizonAwsMachineImages>,
127 #[serde(default, skip_serializing_if = "Option::is_none")]
129 pub gcp: Option<HorizonGcpMachineImages>,
130 #[serde(default, skip_serializing_if = "Option::is_none")]
132 pub azure: Option<HorizonAzureMachineImages>,
133}
134
135#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
141#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
142#[serde(rename_all = "camelCase")]
143pub struct HorizonConfig {
144 pub url: String,
146
147 #[serde(default, skip_serializing_if = "Option::is_none")]
149 pub horizon_machine_image: Option<HorizonMachineImage>,
150
151 pub clusters: HashMap<String, HorizonClusterConfig>,
155}
156
157#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
162#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
163#[serde(tag = "type", rename_all = "camelCase")]
164pub enum ComputeBackend {
165 Horizon(HorizonConfig),
167 }