text: #pragma once
  
  #include <nano/lib/errors.hpp>
  #include <nano/lib/rsnano.hpp>
  
  #include <thread>
  
  namespace nano
  {
  class tomlconfig;
  
  /** Configuration options for LMDB */
  class lmdb_config final
  {
  public:
  	/**
  	 * Dictates how lmdb flushes to disk on commit.
  	 * These options only apply to the ledger database; the wallet database
  	 * always flush.
  	 */
  	enum sync_strategy
  	{
  		/** Always flush to disk on commit. This is default. */
  		always,
  
  		/** Do not flush meta data eagerly. This may cause loss of transactions, but maintains integrity. */
  		nosync_safe,
  
  		/**
  		 * Let the OS decide when to flush to disk. On filesystems with write ordering, this has the same
  		 * guarantees as nosync_safe, otherwise corruption may occur on system crash.
  		 */
  		nosync_unsafe,
  		/**
  		 * Use a writeable memory map. Let the OS decide when to flush to disk, and make the request asynchronous.
  		 * This may give better performance on systems where the database fits entirely in memory, otherwise is
  		 * may be slower.
  		 * @warning Do not use this option if external processes uses the database concurrently.
  		 */
  		nosync_unsafe_large_memory
  	};
  
  	lmdb_config ();
  	void load_dto (rsnano::LmdbConfigDto & dto);
  	rsnano::LmdbConfigDto to_dto () const;
  
  	nano::error deserialize_toml (nano::tomlconfig & toml_a);
  
  	/** Sync strategy for the ledger database */
  	sync_strategy sync{ always };
  	uint32_t max_databases{ 128 };
  	size_t map_size{ 256ULL * 1024 * 1024 * 1024 };
  };
  }
  