crosup-types 0.2.1

A simple CLI tool to quickly setup your development environment on Chomebook (ChromeOS) or any Linux Distribution.
Documentation
use indexmap::IndexMap;
use serde::{Deserialize, Serialize};

use crate::fleek::FleekConfiguration;

use super::{
    apk::ApkConfiguration,
    apt::{default_apt_install, AptConfiguration},
    brew::{default_brew_install, BrewConfiguration},
    curl::{default_curl_install, CurlConfiguration},
    dnf::DnfConfiguration,
    emerge::EmergeConfiguration,
    git::{default_git_install, GitConfiguration},
    install::InstallConfiguration,
    nix::{default_nix_install, NixConfiguration},
    pacman::PacmanConfiguration,
    slackpkg::SlackpkgConfiguration,
    yum::YumConfiguration,
    zypper::ZypperConfiguration,
};

pub enum ConfigFormat {
    TOML,
    HCL,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Configuration {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub packages: Option<Vec<String>>,
    #[serde(
        skip_serializing_if = "Option::is_none",
        serialize_with = "hcl::ser::block"
    )]
    pub install: Option<InstallConfiguration>,
    #[serde(
        skip_serializing_if = "Option::is_none",
        serialize_with = "hcl::ser::labeled_block"
    )]
    pub brew: Option<IndexMap<String, BrewConfiguration>>,

    #[serde(
        skip_serializing_if = "Option::is_none",
        serialize_with = "hcl::ser::labeled_block"
    )]
    pub git: Option<IndexMap<String, GitConfiguration>>,

    #[serde(
        skip_serializing_if = "Option::is_none",
        serialize_with = "hcl::ser::labeled_block"
    )]
    pub nix: Option<IndexMap<String, NixConfiguration>>,

    #[serde(
        skip_serializing_if = "Option::is_none",
        serialize_with = "hcl::ser::labeled_block"
    )]
    pub curl: Option<IndexMap<String, CurlConfiguration>>,

    #[serde(
        skip_serializing_if = "Option::is_none",
        serialize_with = "hcl::ser::labeled_block"
    )]
    pub apt: Option<IndexMap<String, AptConfiguration>>,

    #[serde(
        skip_serializing_if = "Option::is_none",
        serialize_with = "hcl::ser::labeled_block"
    )]
    pub yum: Option<IndexMap<String, YumConfiguration>>,

    #[serde(
        skip_serializing_if = "Option::is_none",
        serialize_with = "hcl::ser::labeled_block"
    )]
    pub dnf: Option<IndexMap<String, DnfConfiguration>>,

    #[serde(
        skip_serializing_if = "Option::is_none",
        serialize_with = "hcl::ser::labeled_block"
    )]
    pub zypper: Option<IndexMap<String, ZypperConfiguration>>,

    #[serde(
        skip_serializing_if = "Option::is_none",
        serialize_with = "hcl::ser::labeled_block"
    )]
    pub apk: Option<IndexMap<String, ApkConfiguration>>,

    #[serde(
        skip_serializing_if = "Option::is_none",
        serialize_with = "hcl::ser::labeled_block"
    )]
    pub pacman: Option<IndexMap<String, PacmanConfiguration>>,

    #[serde(
        skip_serializing_if = "Option::is_none",
        serialize_with = "hcl::ser::labeled_block"
    )]
    pub emerge: Option<IndexMap<String, EmergeConfiguration>>,

    #[serde(
        skip_serializing_if = "Option::is_none",
        serialize_with = "hcl::ser::labeled_block"
    )]
    pub slackpkg: Option<IndexMap<String, SlackpkgConfiguration>>,

    #[serde(
        skip_serializing_if = "Option::is_none",
        serialize_with = "hcl::ser::labeled_block"
    )]
    pub fleek: Option<IndexMap<String, FleekConfiguration>>,
}

impl Default for Configuration {
    fn default() -> Self {
        Configuration {
            packages: None,
            install: None,
            brew: Some(default_brew_install()),
            git: Some(default_git_install()),
            nix: Some(default_nix_install()),
            curl: Some(default_curl_install()),
            apt: Some(default_apt_install()),
            yum: None,
            dnf: None,
            zypper: None,
            apk: None,
            pacman: None,
            emerge: None,
            slackpkg: None,
            fleek: None,
        }
    }
}