Files
noto/include/noto/transaction.hpp
T
khodowany fc0bad81c4
publish / publish (push) Successful in 26m25s
Initial public khodo snapshot
2026-09-04 19:30:11 -05:00

48 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_{};
};
}