this is an attempt to use Java style strategy dispatch in rust
The strategy pattern is a behavioral design pattern that turns a set of behaviors into objects and makes them interchangeable inside original context object.