anchor.diff:  -type entry_index() :: binary().
   -type entry_content() :: json_utils:json_map().
   -type entry() :: {entry_index(), {infinite_log:timestamp(), entry_content()}}.
  +% log entry in a format suitable for external APIs (ready to be encoded to json)
  +% #{
  +%     <<"isLast">> => boolean(),
  +%     <<"logEntries">> => [
  +%         #{
  +%             <<"index">> => entry_index(),
  +%             <<"timestamp">> => infinite_log:timestamp(),
  +%             <<"content">> => json_utils:json_map()
  +%         }
  +%     ]
  +% }
  +-type browse_result() :: json_utils:json_map().
   
  -%% Redefinition of infinite log browser listing opts to allow binary indices
  -%% and listing exclusively from an index.
  -%% @formatter:off
  +% Redefinition of infinite log browser listing opts to allow binary indices
  +% and listing exclusively from an index.
  +% @formatter:off
   -type listing_opts() :: #{
       direction => infinite_log_browser:direction(),
       start_from => undefined |
  
positive.code: -export([append/2]).
  -export([default_start_index/1]).
  -export([list_and_postprocess/3]).
  
  %% datastore_model callbacks
  -export([get_ctx/0]).
  
negative.code:     offset => infinite_log_browser:offset(),
      limit => infinite_log_browser:limit()
  }.
  % @formatter:on
  
  % Mapping function that will be applied to each listed infinite log
  % entry before the result is returned.
  -type listing_postprocessor(MappedEntry) :: fun((entry()) -> MappedEntry).
  
  -export_type([id/0, entry_index/0, entry/0, browse_result/0, listing_opts/0, listing_postprocessor/1]).
  
  -define(CTX, #{model => ?MODULE}).
  
  