anchor.diff:  compaction_lens() ->
       {fun compaction_lens_get/1, fun compaction_lens_set/2}.
   
  -compaction_defaults() ->
  -    [{Key, Default} || {Key, _, Default} <- compaction_lens_props()].
  -
   lens_get({Get, _}, Dict) ->
       Get(Dict).
   
   lens_get_many(Lenses, Dict) ->
  -    [{Key, lens_get(L, Dict)} || {Key, L, _} <- Lenses].
  +    [{Key, lens_get(L, Dict)} || {Key, L} <- Lenses].
   
   lens_set(Value, {_, Set}, Dict) ->
       Set(Value, Dict).
  
positive.code:     end.
  
  do_get_from_json(Key, JSON) ->
      {_, Lens, _} = lists:keyfind(Key, 1, known_settings()),
      Settings = decode_settings_json(JSON),
      lens_get(Lens, Settings).
  
  
negative.code:     {Get, Set}.
  
  general_settings_lens_props() ->
      [{indexerThreads, indexer_threads_lens()},
       {memorySnapshotInterval, id_lens(<<"indexer.settings.inmemory_snapshot.interval">>)},
       {stableSnapshotInterval, id_lens(<<"indexer.settings.persisted_snapshot.interval">>)},
       {maxRollbackPoints, id_lens(<<"indexer.settings.recovery.max_rollbacks">>)},
       {logLevel, id_lens(<<"indexer.settings.log_level">>)}].
  
  general_settings_defaults() ->
      [{indexerThreads, 4},
       {memorySnapshotInterval, 200},
       {stableSnapshotInterval, 5000},
       {maxRollbackPoints, 5},
       {logLevel, <<"debug">>}].
  
  general_settings_lens_get(Dict) ->
      lens_get_many(general_settings_lens_props(), Dict).
  