Files
khodowany 46f7c13121
publish / publish (push) Successful in 16m36s
Formatting
2026-09-14 23:55:04 -05:00

49 lines
1.6 KiB
C++

#pragma once
#include <chrono>
#include <cstdint>
#include <expected>
#include <string>
#include <variant>
#include <vector>
#include <boost/json/value.hpp>
#include <modulus.hpp>
namespace noto {
enum class open_mode {
READ_ONLY,
READ_WRITE,
READ_WRITE_CREATE,
MEMORY,
};
struct pragma_setting {
std::string name{};
std::variant<std::bool_t, std::int64_t, std::string> value{};
};
struct connection_config {
std::string name{};
std::string filename{":memory:"};
noto::open_mode mode{noto::open_mode::READ_WRITE_CREATE};
std::bool_t uri{false};
std::chrono::milliseconds busy_timeout{std::chrono::seconds{5}};
std::bool_t foreign_keys{true};
std::vector<noto::pragma_setting> pragmas{};
};
auto validate(noto::connection_config const &config) -> std::expected<void, modulus::error>;
auto memory_connection_config(std::string name = {}) -> noto::connection_config;
auto file_connection_config(std::string filename, std::string name = {}) -> noto::connection_config;
auto parse_database_config(boost::json::value const &value) -> std::expected<noto::connection_config, modulus::error>;
auto parse_database_configs(boost::json::value const &value) -> std::expected<std::vector<noto::connection_config>, modulus::error>;
auto load_database_configs(std::string const &path) -> std::expected<std::vector<noto::connection_config>, modulus::error>;
auto to_json(std::variant<std::bool_t, std::int64_t, std::string> const &value) -> boost::json::value;
auto to_json(noto::connection_config const &config) -> boost::json::value;
auto to_json(std::vector<noto::connection_config> const &configs) -> boost::json::value;
}