#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct FbxVersion(u32);
impl FbxVersion {
pub const V7_4: Self = FbxVersion(7400);
pub const V7_5: Self = FbxVersion(7500);
#[inline]
#[must_use]
pub(crate) const fn new(version: u32) -> Self {
FbxVersion(version)
}
#[inline]
#[must_use]
pub(crate) const fn raw(self) -> u32 {
self.0
}
#[inline]
#[must_use]
pub const fn major(self) -> u32 {
self.raw() / 1000
}
#[inline]
#[must_use]
pub const fn minor(self) -> u32 {
(self.raw() % 1000) / 100
}
#[inline]
#[must_use]
pub const fn major_minor(self) -> (u32, u32) {
let major = self.major();
let minor = self.minor();
(major, minor)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn version() {
let major = 7;
let minor = 4;
let raw = major * 1000 + minor * 100;
let ver = FbxVersion(raw);
assert_eq!(ver.raw(), raw, "Should return raw value");
assert_eq!(ver.major(), major, "Should return major version");
assert_eq!(ver.minor(), minor, "Should return minor version");
assert_eq!(
ver.major_minor(),
(major, minor),
"Should return major and minor version"
);
}
}