Struct pattern matching

You can define a Protocol and have separate implementation for each struct