autd3-rs 0.2.0

Core async client library for the AUTD3 phased-array kit.
Documentation
use core::fmt;

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Version {
    pub major: u8,
    pub minor: u8,
    pub patch: u8,
}

impl Version {
    pub const UNKNOWN: Self = Self {
        major: 0,
        minor: 0,
        patch: 0,
    };

    #[must_use]
    pub const fn is_unknown(self) -> bool {
        self.major == 0 && self.minor == 0 && self.patch == 0
    }
}

impl fmt::Display for Version {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "{}.{}.{}", self.major, self.minor, self.patch)
    }
}

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct FirmwareVersion {
    pub cpu: Version,
    pub fpga: Version,
}

impl fmt::Display for FirmwareVersion {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "CPU: {}, FPGA: ", self.cpu)?;
        if self.fpga.is_unknown() {
            f.write_str("unknown")
        } else {
            write!(f, "{}", self.fpga)
        }
    }
}