49 lines
1.6 KiB
C++
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;
|
|
|
|
}
|