use core::fmt;
use crate::strings::StringEncoding;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum NsisVersion {
V1,
V2,
V3,
Park,
}
impl fmt::Display for NsisVersion {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let s = match self {
NsisVersion::V1 => "NSIS 1",
NsisVersion::V2 => "NSIS 2",
NsisVersion::V3 => "NSIS 3",
NsisVersion::Park => "NSIS Park",
};
f.write_str(s)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ParkSubVersion {
Park1,
Park2,
Park3,
}
impl NsisVersion {
pub fn detect(encoding: StringEncoding, is_legacy_signature: bool) -> Self {
if is_legacy_signature {
return NsisVersion::V1;
}
match encoding {
StringEncoding::Unicode => NsisVersion::V3,
StringEncoding::Park => NsisVersion::Park,
StringEncoding::Ansi => NsisVersion::V2,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn detect_v1_from_legacy() {
assert_eq!(
NsisVersion::detect(StringEncoding::Ansi, true),
NsisVersion::V1
);
}
#[test]
fn detect_v2_from_ansi() {
assert_eq!(
NsisVersion::detect(StringEncoding::Ansi, false),
NsisVersion::V2
);
}
#[test]
fn detect_v3_from_unicode() {
assert_eq!(
NsisVersion::detect(StringEncoding::Unicode, false),
NsisVersion::V3
);
}
#[test]
fn detect_park() {
assert_eq!(
NsisVersion::detect(StringEncoding::Park, false),
NsisVersion::Park
);
}
}