anchor.diff:  
   decode(Bin, json, JsonMod) when is_atom(JsonMod) ->
       JsonMod:decode(Bin);
  -decode(Bin, json, {JsonMod, _, {decode, Opts}}) when is_atom(JsonMod) ->
  -    JsonMod:decode(Bin, Opts);
  +decode(Bin, json, {JsonMod, _, DecodeOpts}) when is_atom(JsonMod) ->
  +    JsonMod:decode(Bin, DecodeOpts);
   decode(<<?JSONB_VERSION_1:8, Bin/binary>>, jsonb, JsonMod) when is_atom(JsonMod) ->
       JsonMod:decode(Bin);
  -decode(<<?JSONB_VERSION_1:8, Bin/binary>>, jsonb, {JsonMod, _, {decode, Opts}}) when is_atom(JsonMod) ->
  -    JsonMod:decode(Bin, Opts);
  +decode(<<?JSONB_VERSION_1:8, Bin/binary>>, jsonb, {JsonMod, _, DecodeOpts}) when is_atom(JsonMod) ->
  +    JsonMod:decode(Bin, DecodeOpts);
   decode(Bin, json, _) ->
       Bin;
   decode(<<?JSONB_VERSION_1:8, Bin/binary>>, jsonb, _) ->
  
positive.code: 
  encode(ErlJson, json, JsonMod) when is_atom(JsonMod) ->
      JsonMod:encode(ErlJson);
  encode(ErlJson, json, {JsonMod, {encode, Opts}, _}) when is_atom(JsonMod) ->
      JsonMod:encode(ErlJson, Opts);
  encode(ErlJson, jsonb, JsonMod) when is_atom(JsonMod) ->
      <<?JSONB_VERSION_1:8, (JsonMod:encode(ErlJson))/binary>>;
  encode(ErlJson, jsonb, {JsonMod, {encode, Opts}, _}) when is_atom(JsonMod) ->
      <<?JSONB_VERSION_1:8, (JsonMod:encode(ErlJson, Opts))/binary>>;
  encode(Bin, json, _) ->
      Bin;
  encode(Bin, jsonb, _) ->
  
negative.code: %%   and returns a valid JSON binary string.
  %% - decode/1 expects a valid JSON binary string, and returns erlang-formatted JSON.
  %%
  %% or a tuple {Mod, EncodeOpts, DecodeOpts} where Mod implements encode/2 and
  %% decode/2 with the same interface semantics as encode/1 and decode/1, while
  %% accepting Opts as options to pass into the encode/2 and decode/2 functions.
  %%
  