def self.decode_rdata(message_decoder)
start_index = message_decoder.index
rdata_len = -> do
rdata_length_str = message_decoder.data[start_index - 2, 2]
rdata_length_str.unpack('n').first
end
next_domain_and_bitmap = -> do
next_domain = message_decoder.get_name
bitmap_start_index = message_decoder.index
called_from_new_from_data = (start_index == 0)
bitmap_length = called_from_new_from_data \
? message_decoder.data.size \
: rdata_len.() - (bitmap_start_index - start_index)
bitmap = message_decoder.get_bytes(bitmap_length)
bitmap = BitMapping.reverse_binary_string_bits(bitmap)
[next_domain, bitmap]
end
next_domain, type_bitmap = next_domain_and_bitmap.()
types = TypeBitmap.from_binary_string(type_bitmap).to_type_array
new(next_domain: next_domain, types: types)
end