https://medium.com/@adamszpilewicz/using-traits-as-interfaces-in-rust-and-how-it-compares-to-go-6b5b90aa6a77