anchor.diff:              false
       end.
   
  +-spec proto2_type_default(gpb_field_type(), gpb_parse:defs()) -> term().
   proto2_type_default(Type, MsgDefs) ->
       %% Type-specific defaults for proto2 are the same as for proto3,
       %% with one slight exception, for enums. In both proto2 and
  
positive.code: map_item_tmp_name() ->
      '$mapitem'.
  
  map_item_pseudo_fields(KeyType, ValueType) ->
      [#?gpb_field{name=key, fnum=1, rnum=2,
                   occurrence=required, type=KeyType},
       #?gpb_field{name=value, fnum=2, rnum=3,
                   occurrence=required, type=ValueType}].
  
  is_allowed_as_key_type({enum,_}) -> false;
  is_allowed_as_key_type({msg,_}) -> false;
  is_allowed_as_key_type(double) -> false;
  
negative.code: is_packed(#?gpb_field{opts=Opts}) ->
      lists:member(packed, Opts).
  
  -spec is_msg_proto3(atom(), gpb_parse:defs()) -> boolean().
  is_msg_proto3(Name, MsgDefs) ->
      case lists:keyfind(proto3_msgs, 1, MsgDefs) of
          {proto3_msgs, Names} ->
  