public NamingLookupResponse Decode(byte[] data)
        {
            AvroNamingLookupResponse response    = AvroUtils.AvroDeserialize <AvroNamingLookupResponse>(data);
            List <NameAssignment>    assignments =
                response.tuples.Select(x => new NameAssignment(x.id, x.host, x.port)).ToList();

            return(new NamingLookupResponse(assignments));
        }
        public byte[] Encode(NamingLookupResponse obj)
        {
            List <AvroNamingAssignment> tuples = obj.NameAssignments
                                                 .Select(assignment => new AvroNamingAssignment()
            {
                id   = assignment.Identifier,
                host = assignment.Endpoint.Address.ToString(),
                port = assignment.Endpoint.Port
            }).ToList();

            AvroNamingLookupResponse response = new AvroNamingLookupResponse {
                tuples = tuples
            };

            return(AvroUtils.AvroSerialize(response));
        }