I haven't looked in more detail, but one blocker is that `ProtoMethods() *methods` returns a private type, making it effectively unimplementable outside this package.
I'm struggling to understand what the rationale _for_ doing it is though. Maybe it's to avoid an import cycle?