pub trait Datagram {
type O1: Operation;
type O2: Operation;
type G: OperationGenerator<O1 = Self::O1, O2 = Self::O2>;
// Required method
fn operation_generator(
self,
geometry: &Geometry,
) -> Result<Self::G, AUTDInternalError>;
// Provided methods
fn timeout(&self) -> Option<Duration> { ... }
fn parallel_threshold(&self) -> Option<usize> { ... }
fn trace(&self, _geometry: &Geometry) { ... }
}