init.h raw
1 // Copyright (c) 2023-present The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5 #ifndef BITCOIN_COMMON_INIT_H
6 #define BITCOIN_COMMON_INIT_H
7
8 #include <util/translation.h>
9
10 #include <functional>
11 #include <optional>
12 #include <string>
13 #include <vector>
14
15 class ArgsManager;
16
17 namespace common {
18 enum class ConfigStatus {
19 FAILED, //!< Failed generically.
20 FAILED_WRITE, //!< Failed to write settings.json
21 ABORTED, //!< Aborted by user
22 };
23
24 struct ConfigError {
25 ConfigStatus status;
26 bilingual_str message{};
27 std::vector<std::string> details{};
28 };
29
30 //! Callback function to let the user decide whether to abort loading if
31 //! settings.json file exists and can't be parsed, or to ignore the error and
32 //! overwrite the file.
33 using SettingsAbortFn = std::function<bool(const bilingual_str& message, const std::vector<std::string>& details)>;
34
35 /* Read config files, and create datadir and settings.json if they don't exist. */
36 std::optional<ConfigError> InitConfig(ArgsManager& args, SettingsAbortFn settings_abort_fn = nullptr);
37 } // namespace common
38
39 #endif // BITCOIN_COMMON_INIT_H
40