use serde::{Deserialize, Serialize};
use std::fmt;
use crate::base::fileset::FileSet;
use crate::base::utils::{default_false, default_true};
#[derive(Debug, Deserialize, Serialize)]
#[allow(clippy::struct_excessive_bools)]
pub struct NsisConfig {
pub files: Option<Vec<FileSet>>,
#[serde(default = "default_true")]
pub one_click: bool,
#[serde(default = "default_false")]
pub per_machine: bool,
#[serde(default = "default_true")]
pub allow_elevation: bool,
#[serde(default = "default_true")]
pub allow_to_change_installation_directory: bool,
pub installer_icon: String,
pub uninstaller_icon: String,
pub installer_header: Option<String>,
pub installer_header_icon: Option<String>,
pub installer_sidebar: Option<String>,
pub uninstaller_sidebar: Option<String>,
pub uninstall_display_name: Option<String>,
pub include: Option<String>,
pub script: Option<String>,
#[serde(default = "default_artifact_name")]
pub artifact_name: String,
#[serde(default = "default_false")]
pub delete_app_data_on_uninstall: bool,
#[serde(default = "default_true")]
pub unicode: bool,
pub guid: Option<String>,
#[serde(default = "default_true")]
pub warnings_as_errors: bool,
#[serde(default = "default_true")]
pub run_after_finish: bool,
#[serde(default = "default_false")]
pub run_on_startup: bool,
#[serde(default = "default_true")]
pub create_desktop_shortcut: bool,
#[serde(default = "default_true")]
pub create_start_menu_shortcut: bool,
#[serde(default = "default_compress_method")]
pub compress_method: CompressMethod,
}
#[derive(Debug, Deserialize, Serialize)]
pub enum CompressMethod {
#[serde(alias = "bzip2")]
BZip2,
#[serde(alias = "lzma")]
Lzma,
#[serde(alias = "zlib")]
Zlib,
}
impl fmt::Display for CompressMethod {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::BZip2 => write!(f, "bzip2"),
Self::Lzma => write!(f, "lzma"),
Self::Zlib => write!(f, "zlib"),
}
}
}
fn default_artifact_name() -> String {
"${product_name} Setup ${version}.${ext}".to_string()
}
const fn default_compress_method() -> CompressMethod {
CompressMethod::Lzma
}