autd3capi_def/
dynamic_link.rs1use autd3_driver::{error::AUTDInternalError, geometry::Geometry, link::LinkSyncBuilder};
15
16use crate::L;
17
18type LinkBuilderGen = dyn FnOnce(&Geometry) -> Result<Box<L>, AUTDInternalError>;
19
20pub struct DynamicLinkBuilder {
21 link_gen: Box<LinkBuilderGen>,
22}
23
24impl DynamicLinkBuilder {
25 pub fn new<B: LinkSyncBuilder + 'static>(b: B) -> Self {
26 Self {
27 link_gen: Box::new(move |geometry| Ok(Box::new(b.open(geometry)?))),
28 }
29 }
30}
31
32impl LinkSyncBuilder for DynamicLinkBuilder {
33 type L = Box<L>;
34
35 fn open(self, geometry: &Geometry) -> Result<Self::L, AUTDInternalError> {
36 (self.link_gen)(geometry)
37 }
38}