# File lib/beefcake.rb, line 59 def encode(buf = Buffer.new) validate! if ! buf.respond_to?(:<<) raise ArgumentError, "buf doesn't respond to `<<`" end if ! buf.is_a?(Buffer) buf = Buffer.new(buf) end # TODO: Error if any required fields at nil fields.values.sort.each do |fld| if fld.opts[:packed] bytes = encode!(Buffer.new, fld, 0) buf.append_info(fld.fn, Buffer.wire_for(fld.type)) buf.append_uint64(bytes.length) buf << bytes else encode!(buf, fld, fld.fn) end end buf end