pub trait Module {
type Context;
type ControllerContext;
type ControllerReturn;
// Provided methods
fn imports(
&self,
ctx: &mut Self::Context,
) -> Vec<Box<dyn Module<ControllerContext = Self::ControllerContext, Context = Self::Context, ControllerReturn = Self::ControllerReturn>>> { ... }
fn controllers(
&self,
ctx: &mut Self::Context,
) -> Vec<Box<dyn Fn(&mut Self::ControllerContext) -> ControllerDetails<Self::ControllerReturn>>> { ... }
}