anchor.diff:  size(DataObject) -> 
    ?MODULE:size(decode(DataObject)).
   
  -%% @doc Update a key with a new value. If key is not present, 
  -%% error:badarg exception is raised.
  --spec update(key(),value(),data_object()) -> data_object().
  -update(Key,Value,DataObject) when is_list(DataObject) ->
  -    case proplists:is_defined(Key,DataObject) of
  -        true -> [{Key,Value} | proplists:delete(Key,DataObject)];
  -        false -> erlang:error(badarg)
  -    end;
  -update(Key,Value,DataObject) when is_map(DataObject) ->
  -    %% Maps update raises error:badarg by default
  -    %% if key is not present
  -    maps:update(Key,Value,DataObject);
  -update(Key,Value,DataObject) ->
  -    encode(update(Key,Value,decode(DataObject))).
  -
   %% @doc Returns a complete list of values, in arbitrary order, from data object
   -spec values(data_object()) -> list().
   values(DataObject) when is_list(DataObject) ->
  
positive.code: put(Key,Value,DataObject) ->
      encode(?MODULE:put(Key,Value,decode(DataObject))).
  
  %% @doc Remove a key from a data object
  -spec remove(key(), data_object()) -> data_object().
  remove(Key,DataObject) when is_list(DataObject) ->
      proplists:delete(Key,DataObject);
  remove(Key,DataObject) when is_map(DataObject) ->
      maps:remove(Key,DataObject);
  remove(Key,DataObject) ->
      encode(remove(Key,decode(DataObject))).
      
  %% @doc Size of a data object, ignoring null values
  -spec size(data_object()) -> integer().
  size(DataObject) when is_list(DataObject) -> 
  
negative.code:         , {"json_custom_default"
             , ?_assertEqual(test, ?MODULE:get(<<"sme">>,?TEST_JSON,test))}]}.
  
  keys_test_() ->
      Keys = [<<"surname">>,<<"name">>,<<"foo">>
                         ,<<"earthling">>,<<"age">>,<<"empty">>], % lists:sort
  