// SPDX-FileCopyrightText: 2020 Serokell // // SPDX-License-Identifier: MPL-2.0 use merge::Merge; use serde::Deserialize; use std::collections::HashMap; use std::path::PathBuf; #[derive(Deserialize, Debug, Clone, Merge)] pub struct GenericSettings { #[serde(rename(deserialize = "sshUser"))] pub ssh_user: Option, pub user: Option, #[serde( skip_serializing_if = "Vec::is_empty", default, rename(deserialize = "sshOpts") )] #[merge(strategy = merge::vec::append)] pub ssh_opts: Vec, #[serde(rename(deserialize = "fastConnection"))] pub fast_connection: Option, #[serde(rename(deserialize = "autoRollback"))] pub auto_rollback: Option, #[serde(rename(deserialize = "confirmTimeout"))] pub confirm_timeout: Option, #[serde(rename(deserialize = "tempPath"))] pub temp_path: Option, #[serde(rename(deserialize = "magicRollback"))] pub magic_rollback: Option, #[serde(rename(deserialize = "sudo"))] pub sudo: Option, #[serde(default,rename(deserialize = "remoteBuild"))] pub remote_build: Option, } #[derive(Deserialize, Debug, Clone)] pub struct NodeSettings { pub hostname: String, pub profiles: HashMap, #[serde( skip_serializing_if = "Vec::is_empty", default, rename(deserialize = "profilesOrder") )] pub profiles_order: Vec, } #[derive(Deserialize, Debug, Clone)] pub struct ProfileSettings { pub path: String, #[serde(rename(deserialize = "profilePath"))] pub profile_path: Option, } #[derive(Deserialize, Debug, Clone)] pub struct Profile { #[serde(flatten)] pub profile_settings: ProfileSettings, #[serde(flatten)] pub generic_settings: GenericSettings, } #[derive(Deserialize, Debug, Clone)] pub struct Node { #[serde(flatten)] pub generic_settings: GenericSettings, #[serde(flatten)] pub node_settings: NodeSettings, } #[derive(Deserialize, Debug, Clone)] pub struct Data { #[serde(flatten)] pub generic_settings: GenericSettings, pub nodes: HashMap, }