use core::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct PdfVersion {
pub major: u8,
pub minor: u8,
}
impl PdfVersion {
pub const PDF_1_0: Self = Self { major: 1, minor: 0 };
pub const PDF_1_4: Self = Self { major: 1, minor: 4 };
pub const PDF_1_5: Self = Self { major: 1, minor: 5 };
pub const PDF_1_7: Self = Self { major: 1, minor: 7 };
pub const PDF_2_0: Self = Self { major: 2, minor: 0 };
#[must_use]
pub const fn new(major: u8, minor: u8) -> Self {
Self { major, minor }
}
}
impl fmt::Display for PdfVersion {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}.{}", self.major, self.minor)
}
}
#[cfg(test)]
mod tests {
use super::PdfVersion;
#[test]
fn display_spells_the_header() {
assert_eq!(PdfVersion::PDF_1_0.to_string(), "1.0");
assert_eq!(PdfVersion::PDF_1_4.to_string(), "1.4");
assert_eq!(PdfVersion::PDF_1_7.to_string(), "1.7");
assert_eq!(PdfVersion::PDF_2_0.to_string(), "2.0");
}
#[test]
fn ordering_is_major_then_minor() {
assert!(PdfVersion::PDF_1_0 < PdfVersion::PDF_1_4);
assert!(PdfVersion::PDF_1_4 < PdfVersion::PDF_1_5);
assert!(PdfVersion::PDF_1_5 < PdfVersion::PDF_1_7);
assert!(PdfVersion::PDF_1_7 < PdfVersion::PDF_2_0);
assert!(PdfVersion::new(1, 9) < PdfVersion::new(2, 0));
assert!(PdfVersion::new(1, 9) < PdfVersion::new(11, 0));
}
#[test]
fn the_named_constants_are_their_digits() {
assert_eq!(PdfVersion::PDF_1_0, PdfVersion::new(1, 0));
assert_eq!(PdfVersion::PDF_1_4, PdfVersion::new(1, 4));
assert_eq!(PdfVersion::PDF_1_5, PdfVersion::new(1, 5));
assert_eq!(PdfVersion::PDF_1_7, PdfVersion::new(1, 7));
assert_eq!(PdfVersion::PDF_2_0, PdfVersion::new(2, 0));
}
#[test]
fn a_minor_can_be_bumped_by_struct_update() {
let v = PdfVersion {
minor: 5,
..PdfVersion::PDF_1_7
};
assert_eq!(v, PdfVersion::PDF_1_5);
}
}