anchor.diff:       "\n"].
   
   format_nif_cc_field_unpacker(DestVar, MsgVar, _MsgName, #?gpb_field{}=Field,
  -                             Defs) ->
  -    #?gpb_field{occurrence=Occurrence}=Field,
  +                             Defs, Opts) ->
  +    #?gpb_field{occurrence=Occurrence, type=Type}=Field,
       case Occurrence of
           required ->
               format_nif_cc_field_unpacker_single(DestVar, MsgVar, Field, Defs);
           optional ->
               format_nif_cc_field_unpacker_single(DestVar, MsgVar, Field, Defs);
           repeated ->
  -            format_nif_cc_field_unpacker_repeated(DestVar, MsgVar, Field, Defs)
  +            case Type of
  +                {map,_,_} ->
  +                    format_nif_cc_field_unpacker_maptype(DestVar, MsgVar,
  +                                                         Field, Defs, Opts);
  +                _ ->
  +                    format_nif_cc_field_unpacker_repeated(DestVar, MsgVar,
  +                                                          Field, Defs)
  +            end
       end;
   format_nif_cc_field_unpacker(DestVar, MsgVar, MsgName, #gpb_oneof{}=Field,
  -                             Defs) ->
  +                             Defs, _Opts) ->
       #gpb_oneof{name=OFName, fields=OFields} = Field,
       CPkg = get_cc_pkg(Defs),
       CMsgType = CPkg ++ "::" ++ dot_replace_s(MsgName, "::"),
  
positive.code:      inline_attr('erlang_++',2),
       "'erlang_++'(A, B) -> A ++ B.\n"].
  
  format_default_translators(#anres{map_types=MapTypes}, Opts) ->
      HaveMaps = sets:size(MapTypes) > 0,
      [%% Auxiliary helpers in case of fields of type map<_,_>
       case get_records_or_maps_by_opts(Opts) of
           records ->
               [inline_attr(mt_maptuple_to_pseudomsg_r,2),
                gpb_codegen:format_fn(
                  mt_maptuple_to_pseudomsg_r,
                  fun({K,V},RName) -> {RName,K,V} end),
                "\n",
                inline_attr(mt_empty_map_r,0),
                gpb_codegen:format_fn(
                  mt_empty_map_r,
                  fun() -> dict:new() end),
                inline_attr(mt_add_item_r,2),
                gpb_codegen:format_fn(
                  mt_add_item_r,
                  fun({_RName,K,V}, D) -> dict:store(K,V,D) end),
                "\n",
                inline_attr(mt_finalize_items_r,1),
                gpb_codegen:format_fn(
                  mt_finalize_items_r,
                  fun(D) -> dict:to_list(D) end),
                "\n",
                inline_attr(mt_merge_maptuples_r,2),
                gpb_codegen:format_fn(
                  mt_merge_maptuples_r,
                  fun(L1, L2) ->
  
negative.code:              ?f("}\n")];
          {msg, Msg2Name} ->
              UnpackFnName = mk_c_fn(u_msg_, Msg2Name),
              [?f("~s = ~s(env, &~s);\n",
                  [DestVar, UnpackFnName, SrcExpr])];
          {map, KeyType, ValueType} ->
              {KeyDest, ValueDest} = DestVar,
              {KeyExpr, ValueExpr} = SrcExpr,
              [format_nif_cc_field_unpacker_by_type(KeyDest, KeyExpr,
                                                    KeyType, Defs),
               format_nif_cc_field_unpacker_by_type(ValueDest, ValueExpr,
                                                    ValueType, Defs)]
      end.
  
  format_nif_cc_field_unpacker_repeated(DestVar, MsgVar, Field, Defs) ->
  