Maybe it would be best to first outline the requirements to use this macro. As I understand it, they are: 1. You must pass a type with a companion object having `apply` and `unapply` methods. 2. The return types in the `unapply` must match the argument types in the `apply` method. 3. The parameter names in your `apply` method must be the same as the property names you want in your JSON. 