pub trait Gain {
// Required method
fn calc<'a>(&'a self, geometry: &Geometry) -> GainCalcResult<'a>;
// Provided methods
fn calc_with_filter<'a>(
&'a self,
geometry: &Geometry,
_filter: HashMap<usize, BitVec<u32>>,
) -> GainCalcResult<'a> { ... }
fn transform<'a, D: Into<Drive>, FT: Fn(&Transducer) -> D + Sync + Send + 'static, F: Fn(&Device) -> FT + 'a>(
f: F,
) -> Box<dyn Fn(&Device) -> Box<dyn Fn(&Transducer) -> Drive + Sync + Send> + 'a>
where Self: Sized { ... }
fn trace(&self, _geometry: &Geometry) { ... }
}