use std::collections::HashMap;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use super::{FileInfo, StringOrU32};
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct NfpmConfig {
pub id: Option<String>,
pub package_name: Option<String>,
pub formats: Vec<String>,
pub vendor: Option<String>,
pub homepage: Option<String>,
pub maintainer: Option<String>,
pub description: Option<String>,
pub license: Option<String>,
pub bindir: Option<String>,
pub contents: Option<Vec<NfpmContent>>,
pub dependencies: Option<HashMap<String, Vec<String>>>,
pub overrides: Option<HashMap<String, serde_json::Value>>,
pub file_name_template: Option<String>,
pub scripts: Option<NfpmScripts>,
pub recommends: Option<Vec<String>>,
pub suggests: Option<Vec<String>>,
pub conflicts: Option<Vec<String>>,
pub replaces: Option<Vec<String>>,
pub provides: Option<Vec<String>>,
pub ids: Option<Vec<String>>,
pub goamd64: Option<Vec<String>>,
pub epoch: Option<String>,
pub release: Option<String>,
pub prerelease: Option<String>,
pub version_metadata: Option<String>,
pub section: Option<String>,
pub priority: Option<String>,
pub meta: Option<bool>,
pub umask: Option<StringOrU32>,
pub mtime: Option<String>,
pub rpm: Option<NfpmRpmConfig>,
pub deb: Option<NfpmDebConfig>,
pub apk: Option<NfpmApkConfig>,
pub archlinux: Option<NfpmArchlinuxConfig>,
pub ipk: Option<NfpmIpkConfig>,
pub libdirs: Option<NfpmLibdirs>,
pub changelog: Option<String>,
#[serde(rename = "if")]
pub if_condition: Option<String>,
pub templated_contents: Option<Vec<NfpmContent>>,
pub templated_scripts: Option<NfpmScripts>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct NfpmLibdirs {
pub header: Option<String>,
pub carchive: Option<String>,
pub cshared: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct NfpmScripts {
pub preinstall: Option<String>,
pub postinstall: Option<String>,
pub preremove: Option<String>,
pub postremove: Option<String>,
}
pub type NfpmFileInfo = FileInfo;
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct NfpmContent {
pub src: String,
pub dst: String,
#[serde(rename = "type")]
pub content_type: Option<String>,
pub file_info: Option<NfpmFileInfo>,
pub packager: Option<String>,
pub expand: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct NfpmRpmConfig {
pub summary: Option<String>,
pub compression: Option<String>,
pub group: Option<String>,
pub packager: Option<String>,
pub prefixes: Option<Vec<String>>,
pub signature: Option<NfpmSignatureConfig>,
pub scripts: Option<NfpmRpmScripts>,
pub build_host: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct NfpmRpmScripts {
pub pretrans: Option<String>,
pub posttrans: Option<String>,
}
impl NfpmRpmConfig {
pub fn is_empty(&self) -> bool {
self.summary.is_none()
&& self.compression.is_none()
&& self.group.is_none()
&& self.packager.is_none()
&& self.prefixes.is_none()
&& self.signature.is_none()
&& self.scripts.is_none()
&& self.build_host.is_none()
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct NfpmDebConfig {
pub compression: Option<String>,
pub predepends: Option<Vec<String>>,
pub triggers: Option<NfpmDebTriggers>,
pub breaks: Option<Vec<String>>,
pub lintian_overrides: Option<Vec<String>>,
pub signature: Option<NfpmSignatureConfig>,
pub fields: Option<HashMap<String, String>>,
pub scripts: Option<NfpmDebScripts>,
pub arch_variant: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct NfpmDebScripts {
pub rules: Option<String>,
pub templates: Option<String>,
pub config: Option<String>,
}
impl NfpmDebConfig {
pub fn is_empty(&self) -> bool {
self.compression.is_none()
&& self.predepends.is_none()
&& self.triggers.is_none()
&& self.breaks.is_none()
&& self.lintian_overrides.is_none()
&& self.signature.is_none()
&& self.fields.is_none()
&& self.scripts.is_none()
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct NfpmDebTriggers {
pub interest: Option<Vec<String>>,
pub interest_await: Option<Vec<String>>,
pub interest_noawait: Option<Vec<String>>,
pub activate: Option<Vec<String>>,
pub activate_await: Option<Vec<String>>,
pub activate_noawait: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct NfpmApkConfig {
pub signature: Option<NfpmSignatureConfig>,
pub scripts: Option<NfpmApkScripts>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct NfpmApkScripts {
pub preupgrade: Option<String>,
pub postupgrade: Option<String>,
}
impl NfpmApkConfig {
pub fn is_empty(&self) -> bool {
self.signature.is_none() && self.scripts.is_none()
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct NfpmArchlinuxConfig {
pub pkgbase: Option<String>,
pub packager: Option<String>,
pub scripts: Option<NfpmArchlinuxScripts>,
}
impl NfpmArchlinuxConfig {
pub fn is_empty(&self) -> bool {
self.pkgbase.is_none() && self.packager.is_none() && self.scripts.is_none()
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct NfpmArchlinuxScripts {
pub preupgrade: Option<String>,
pub postupgrade: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct NfpmIpkConfig {
pub abi_version: Option<String>,
pub alternatives: Option<Vec<NfpmIpkAlternative>>,
pub auto_installed: Option<bool>,
pub essential: Option<bool>,
pub predepends: Option<Vec<String>>,
pub tags: Option<Vec<String>>,
pub fields: Option<HashMap<String, String>>,
}
impl NfpmIpkConfig {
pub fn is_empty(&self) -> bool {
self.abi_version.is_none()
&& self.alternatives.is_none()
&& self.auto_installed.is_none()
&& self.essential.is_none()
&& self.predepends.is_none()
&& self.tags.is_none()
&& self.fields.is_none()
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct NfpmIpkAlternative {
pub priority: Option<i32>,
pub target: Option<String>,
pub link_name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct NfpmSignatureConfig {
pub key_file: Option<String>,
pub key_id: Option<String>,
pub key_passphrase: Option<String>,
pub key_name: Option<String>,
#[serde(rename = "type")]
pub type_: Option<String>,
}