 
   @packed_types [:int32, :int64, :uint32, :uint64, :sint32, :sint64, :bool, :enum, :fixed64, :sfixed64, :double, :fixed32, :sfixed32, :float]
 
+  def encode(msg) do
+  end
+
   def encode(msg, fields) when is_list(fields) do
     encode_field fields, msg, []
   end

  def wire_type(:sfixed32), do: 5
  def wire_type(:float),    do: 5
end

  def encode_varint(v) when v <= 127 when v >= 0, do: <<v>>
  def encode_varint(v) when v >= 128, do: <<1 :: 1, (v &&& 127) :: 7, encode_varint(v >>> 7) :: binary>>

  # ZigZag encoding is used for signed int types, makes negative values encode in smaller space in varint
  def encode_zigzag(v) when v >= 0, do: v * 2
  def encode_zigzag(v), do: v * -2 - 1

  # Wire types
  def wire_type(:int32),    do: 0
