Rework how interfaces are generated and use macros.
Rework how interfaces are generated and use macros.

reproto/reproto,reproto/reproto,reproto/reproto,reproto/reproto,reproto/reproto,reproto/reproto,reproto/reproto,reproto/reproto,reproto/reproto,reproto/reproto,reproto/reproto