envhub_types/
configuration.rs

1use indexmap::IndexMap;
2use serde::{Deserialize, Serialize};
3
4pub enum ConfigFormat {
5    TOML,
6    HCL,
7}
8
9#[derive(Serialize, Deserialize, Debug, Clone, Default)]
10pub struct File {
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub source: Option<String>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub content: Option<String>,
15}
16
17#[derive(Serialize, Deserialize, Debug, Clone, Default)]
18pub struct Packages {
19    pub packages: Vec<String>,
20}
21
22#[derive(Serialize, Deserialize, Debug, Clone, Default)]
23pub struct RtxParams {
24    pub packages: Vec<String>,
25}
26
27#[derive(Serialize, Deserialize, Debug, Clone, Default)]
28pub struct RustupParams {
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub default: Option<String>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub toolchains: Option<Vec<String>>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub components: Option<Vec<String>>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub targets: Option<Vec<String>>,
37}
38
39#[derive(Serialize, Deserialize, Debug, Clone, Default)]
40pub struct Configuration {
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub packages: Option<Vec<String>>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub secrets: Option<Vec<String>>,
45    #[serde(
46        skip_serializing_if = "Option::is_none",
47        serialize_with = "hcl::ser::block"
48    )]
49    pub homebrew: Option<Packages>,
50    #[serde(
51        skip_serializing_if = "Option::is_none",
52        serialize_with = "hcl::ser::block"
53    )]
54    pub pkgx: Option<Packages>,
55    #[serde(
56        skip_serializing_if = "Option::is_none",
57        serialize_with = "hcl::ser::block"
58    )]
59    pub devbox: Option<Packages>,
60    #[serde(
61        skip_serializing_if = "Option::is_none",
62        serialize_with = "hcl::ser::block"
63    )]
64    pub nix: Option<Packages>,
65    #[serde(
66        skip_serializing_if = "Option::is_none",
67        serialize_with = "hcl::ser::block"
68    )]
69    pub envs: Option<IndexMap<String, String>>,
70    #[serde(
71        skip_serializing_if = "Option::is_none",
72        rename = "file",
73        serialize_with = "hcl::ser::labeled_block"
74    )]
75    pub files: Option<IndexMap<String, File>>,
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub symlink_manager: Option<String>,
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub package_manager: Option<String>,
80    #[serde(
81        skip_serializing_if = "Option::is_none",
82        serialize_with = "hcl::ser::block"
83    )]
84    pub rtx: Option<RtxParams>,
85    #[serde(
86        skip_serializing_if = "Option::is_none",
87        serialize_with = "hcl::ser::block"
88    )]
89    pub rustup: Option<RustupParams>,
90}