anchor.diff:  
   %%--------------------------------------------------------------------
   %% @doc
  +%% Updates parameters of this provider using current provider's auth.
  +%% Supports updating name, latitude, longitude and adminEmail.
  +%% @end
  +%%--------------------------------------------------------------------
  +-spec update(Data :: #{binary() => term()}) -> ok | gs_protocol:error().
  +update(Data) ->
  +    update(?ROOT_SESS_ID, Data).
  +
  +%%--------------------------------------------------------------------
  +%% @doc
  +%% Updates parameters of this provider.
  +%% Supports updating name, latitude, longitude and adminEmail.
  +%% @end
  +%%--------------------------------------------------------------------
  +-spec update(SessionId :: gs_client_worker:client(),
  +    Data :: #{binary() => term()}) -> ok | gs_protocol:error().
  +update(SessionId, Data) ->
  +    Result = gs_client_worker:request(SessionId, #gs_req_graph{
  +        operation = update, data = Data,
  +        gri = #gri{type = od_provider, id = ?SELF, aspect = instance}
  +    }),
  +    ?ON_SUCCESS(Result, fun(_) ->
  +        gs_client_worker:invalidate_cache(od_provider, oneprovider:get_id())
  +    end).
  +
  +
  +%%--------------------------------------------------------------------
  +%% @doc
   %% Retrieves provider name of this provider.
   %% @end
   %%--------------------------------------------------------------------
  
positive.code:         ok ->
              gs_client_worker:invalidate_cache(od_provider, oneprovider:get_id()),
              ok;
          ?ERROR_BAD_VALUE_IDENTIFIER_OCCUPIED(<<"subdomain">>) ->
              {error, subdomain_exists};
          Error ->
              Error
      end.
  
negative.code: 
  -export([get/0, get/1, get/2, get_protected_data/2]).
  -export([get_as_map/0]).
  -export([update/1, update/2]).
  -export([get_name/0, get_name/1, get_name/2]).
  -export([get_spaces/0, get_spaces/1, get_spaces/2]).
  -export([has_eff_user/2, has_eff_user/3]).
  