autd3_driver/datagram/
output_mask.rs1use std::convert::Infallible;
2
3use autd3_core::{
4 datagram::{DatagramOption, DatagramS, DeviceFilter, FirmwareLimits, Segment},
5 environment::Environment,
6 geometry::{Device, Geometry, Transducer},
7};
8
9use derive_more::Debug;
10
11#[derive(Debug)]
27pub struct OutputMask<F> {
28 #[debug(ignore)]
29 #[doc(hidden)]
30 pub f: F,
31}
32
33impl<FT: Fn(&Transducer) -> bool, F: Fn(&Device) -> FT> OutputMask<F> {
34 #[must_use]
36 pub const fn new(f: F) -> Self {
37 Self { f }
38 }
39}
40
41pub struct OutputMaskOperationGenerator<F> {
42 pub(crate) f: F,
43 pub(crate) segment: Segment,
44}
45
46impl<FT: Fn(&Transducer) -> bool + Send + Sync, F: Fn(&Device) -> FT> DatagramS for OutputMask<F> {
47 type G = OutputMaskOperationGenerator<F>;
48 type Error = Infallible;
49
50 fn operation_generator_with_segment(
51 self,
52 _: &Geometry,
53 _: &Environment,
54 _: &DeviceFilter,
55 _: &FirmwareLimits,
56 segment: Segment,
57 _: Option<autd3_core::derive::TransitionMode>,
58 ) -> Result<Self::G, Self::Error> {
59 Ok(OutputMaskOperationGenerator { f: self.f, segment })
60 }
61
62 fn option(&self) -> DatagramOption {
63 DatagramOption::default()
64 }
65}