Т.е., действительно не существует подмножества случаев, в котором время, потраченное на это, было бы не оптимальным решением?
в каждом случае надо смотреть. Но смотри - у нас уже может быть логика, описанная в коде, и объекты, которые мы хотим пересылать по сети каким-то образом. Нам бы, очевидно, хотелось, чтобы отправитель и получатель понимали друг друга, поэтому очень удобно описать объекты в виде набора типов, а саму реализацию протокола просто сделать производной из этого описания, через тот же самый генератор, например