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)]
96#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
97#[serde(rename_all = "camelCase")]
98pub struct HorizonMachineImage {
99 pub channel: String,
101 pub machine_image_version: String,
103 pub horizond_version: String,
105 pub git_sha: String,
107 pub created_at: String,
109 pub base_image: HorizonMachineBaseImage,
111 #[serde(default, skip_serializing_if = "Option::is_none")]
113 pub aws: Option<HorizonAwsMachineImages>,
114 #[serde(default, skip_serializing_if = "Option::is_none")]
116 pub gcp: Option<HorizonGcpMachineImages>,
117 #[serde(default, skip_serializing_if = "Option::is_none")]
119 pub azure: Option<HorizonAzureMachineImages>,
120}
121
122#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
128#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
129#[serde(rename_all = "camelCase")]
130pub struct HorizonConfig {
131 pub url: String,
133
134 #[serde(default, skip_serializing_if = "Option::is_none")]
136 pub horizon_machine_image: Option<HorizonMachineImage>,
137
138 pub clusters: HashMap<String, HorizonClusterConfig>,
142}
143
144#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
149#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
150#[serde(tag = "type", rename_all = "camelCase")]
151pub enum ComputeBackend {
152 Horizon(HorizonConfig),
154 }