5#include <neograph/program/core_tool_grant.h>
7#include <asio/awaitable.hpp>
16namespace neograph::program {
20 std::string owner_scope;
21 std::string program_version_id;
23 std::string operation_id;
24 std::uint64_t attempt = 0;
25 std::string binding_fingerprint;
29enum class ProgramCoreToolGrantAdmission {
48 [[nodiscard]]
virtual asio::awaitable<ProgramCoreToolGrantAdmission> admit(
50 [[nodiscard]]
virtual asio::awaitable<std::optional<ProgramCoreToolGrantRecord>> load(
63 virtual std::optional<ProgramCoreToolGrantRecord> load_sync(
69 [[nodiscard]] asio::awaitable<ProgramCoreToolGrantAdmission> admit(
71 [[nodiscard]] asio::awaitable<std::optional<ProgramCoreToolGrantRecord>> load(
80 virtual bool offloads() const noexcept {
return false; }
93 const std::shared_ptr<ProgramCoreToolGrantStore>& store() const noexcept {
return store_; }
95 ProgramCoreToolGrantAdmission admit(
const ProgramCoreToolGrantRecord& record)
const;
96 std::optional<ProgramCoreToolGrantRecord> load(
const ProgramCoreToolGrantContext& context)
const;
97 bool revoke(
const ProgramCoreToolGrantContext& context)
const;
100 std::shared_ptr<ProgramCoreToolGrantStore> store_;
101 SyncProgramCoreToolGrantStore* sync_ =
nullptr;
102 BlockingStorePolicy policy_;
106using ProgramCoreToolGrantPolicyFactory = std::function<
107 std::optional<ProgramCoreToolGrant>(
const ProgramCoreToolGrantRecord&)>;
114NEOGRAPH_PROGRAM_API ProgramCoreToolGrantResolver make_durable_core_tool_grant_resolver(
115 std::shared_ptr<ProgramCoreToolGrantStore> store,
116 ProgramCoreToolGrantPolicyFactory policy_factory);
122NEOGRAPH_PROGRAM_API ProgramCoreToolGrantAwaitableResolver make_durable_core_tool_grant_awaitable_resolver(
123 std::shared_ptr<ProgramCoreToolGrantStore> store,
124 ProgramCoreToolGrantPolicyFactory policy_factory);
NEOGRAPH_API export/import macro for shared-library builds.
How a Program store call is awaited, and how a synchronous caller waits for one (#556).
When a Blocking...Store may wait for a store call that does not complete at once.
Immutable Program identity presented to a host before one Core operation.