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

49 lines
1.2 KiB
C++

#pragma once
#include <expected>
#include <functional>
#include <memory>
#include <boost/asio/awaitable.hpp>
#include <modulus.hpp>
namespace noto {
namespace detail {
struct connection_core;
struct transaction_state;
}
enum class transaction_mode {
DEFERRED,
IMMEDIATE,
EXCLUSIVE,
};
class connection;
class transaction {
public:
transaction() = default;
transaction(noto::transaction const &) = delete;
transaction(noto::transaction &&other) noexcept;
~transaction();
auto operator=(noto::transaction const &) -> noto::transaction & = delete;
auto operator=(noto::transaction &&other) noexcept -> noto::transaction & = delete;
auto active() const -> std::bool_t;
auto async_commit() -> boost::asio::awaitable<std::expected<void, modulus::error>>;
auto async_rollback() -> boost::asio::awaitable<std::expected<void, modulus::error>>;
private:
friend class noto::connection;
friend struct noto::detail::connection_core;
explicit transaction(std::shared_ptr<noto::detail::transaction_state> state);
explicit transaction(std::shared_ptr<noto::detail::connection_core> core, std::function<void()> on_finish = {});
std::shared_ptr<noto::detail::transaction_state> state_{};
};
}