use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use super::archives::ArchiveConfig;
use super::aur_source::AurSourceConfig;
use super::build::BuildConfig;
use super::installers::{
AppBundleConfig, DmgConfig, FlatpakConfig, MsiConfig, NsisConfig, PkgConfig,
};
use super::nfpm::NfpmConfig;
use super::notarize::NotarizeConfig;
use super::publishers::{
AurConfig, CargoPublishConfig, ChocolateyConfig, HomebrewCaskConfig, HomebrewConfig,
KrewConfig, NixConfig, ScoopConfig, WingetConfig,
};
use super::sbom::SbomConfig;
use super::snapcraft::SnapcraftConfig;
use super::source::SourceConfig;
use super::upx::UpxConfig;
use super::{ChecksumConfig, CrossStrategy, DockerSignConfig, DockerV2Config, SignConfig};
use crate::packagers::{MakeselfConfig, SrpmConfig};
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct Defaults {
pub builds: Option<BuildConfig>,
pub archives: Option<ArchiveConfig>,
pub source: Option<SourceConfig>,
pub upx: Option<UpxConfig>,
pub nfpms: Option<NfpmConfig>,
pub snapcrafts: Option<SnapcraftConfig>,
pub flatpaks: Option<FlatpakConfig>,
pub app_bundles: Option<AppBundleConfig>,
pub dmgs: Option<DmgConfig>,
pub pkgs: Option<PkgConfig>,
pub msis: Option<MsiConfig>,
pub nsis: Option<NsisConfig>,
pub makeselves: Option<MakeselfConfig>,
pub srpms: Option<SrpmConfig>,
pub docker_v2: Option<DockerV2Config>,
pub publish: Option<PublishDefaults>,
pub sign: Option<SignConfig>,
pub binary_signs: Option<SignConfig>,
pub docker_signs: Option<DockerSignConfig>,
pub notarize: Option<NotarizeConfig>,
pub sbom: Option<SbomConfig>,
pub targets: Option<Vec<String>>,
pub env: Option<Vec<String>>,
pub cross: Option<CrossStrategy>,
pub checksum: Option<ChecksumConfig>,
pub crates: Option<DefaultsCrateBlock>,
pub workspaces: Option<DefaultsWorkspaceBlock>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct PublishDefaults {
pub homebrew: Option<HomebrewConfig>,
pub homebrew_cask: Option<HomebrewCaskConfig>,
pub cargo: Option<CargoPublishConfig>,
pub scoop: Option<ScoopConfig>,
pub winget: Option<WingetConfig>,
pub chocolatey: Option<ChocolateyConfig>,
pub krew: Option<KrewConfig>,
pub nix: Option<NixConfig>,
pub aur: Option<AurConfig>,
pub aur_source: Option<AurSourceConfig>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(default, deny_unknown_fields)]
pub struct DefaultsCrateBlock {}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(default, deny_unknown_fields)]
pub struct DefaultsWorkspaceBlock {}