autd3-protobuf 32.0.0

gRPC protobuf for autd3
Documentation
use crate::{AUTDProtoBufError, pb::*, traits::FromMessage};

impl FromMessage<FirmwareVersionResponseLightweight>
    for Vec<autd3_driver::firmware::version::FirmwareVersion>
{
    fn from_msg(msg: FirmwareVersionResponseLightweight) -> Result<Self, AUTDProtoBufError> {
        Ok(msg
            .firmware_version_list
            .iter()
            .enumerate()
            .map(|(i, v)| autd3_driver::firmware::version::FirmwareVersion {
                idx: i as _,
                cpu: autd3_driver::firmware::version::CPUVersion {
                    major: autd3_driver::firmware::version::Major(v.cpu_major_version as _),
                    minor: autd3_driver::firmware::version::Minor(v.cpu_minor_version as _),
                },
                fpga: autd3_driver::firmware::version::FPGAVersion {
                    major: autd3_driver::firmware::version::Major(v.fpga_major_version as _),
                    minor: autd3_driver::firmware::version::Minor(v.fpga_minor_version as _),
                    function_bits: v.fpga_function_bits as _,
                },
            })
            .collect())
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn firmware_version() {
        let firmware_versions = vec![autd3_driver::firmware::version::FirmwareVersion {
            idx: 0,
            cpu: autd3_driver::firmware::version::CPUVersion {
                major: autd3_driver::firmware::version::Major(1),
                minor: autd3_driver::firmware::version::Minor(2),
            },
            fpga: autd3_driver::firmware::version::FPGAVersion {
                major: autd3_driver::firmware::version::Major(3),
                minor: autd3_driver::firmware::version::Minor(4),
                function_bits: 5,
            },
        }];
        let response = FirmwareVersionResponseLightweight {
            err: false,
            msg: String::new(),
            firmware_version_list: firmware_versions
                .iter()
                .map(|f| firmware_version_response_lightweight::FirmwareVersion {
                    cpu_major_version: f.cpu.major.0 as _,
                    cpu_minor_version: f.cpu.minor.0 as _,
                    fpga_major_version: f.fpga.major.0 as _,
                    fpga_minor_version: f.fpga.minor.0 as _,
                    fpga_function_bits: f.fpga.function_bits as _,
                })
                .collect(),
        };
        assert_eq!(
            firmware_versions,
            Vec::<autd3_driver::firmware::version::FirmwareVersion>::from_msg(response).unwrap()
        );
    }
}