载入中...
搜索中...
未找到
PolicyRegistry.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include "common/Module.h"
6#include "common/Snapshot.h"
9
10#include <cstdint>
11#include <functional>
12#include <memory>
13#include <string>
14#include <string_view>
15#include <vector>
16
17namespace eve::policyregistry {
18
21
24 std::string domain;
25 std::string name;
27};
28
31 std::string domain;
32 std::string name;
34 int priority = 0;
35 bool enabled = true;
37 std::string schemaId;
38 std::string metadataJson = "{}";
39 // Compatibility projection; the VersionedRegistry slot owns generation.
41};
42
53
56public:
61 explicit PolicyRegistry(eve::PersistentId instanceId = {});
62
64 [[nodiscard]] eve::Result<PolicyHandle> insert(const std::string& domain, const std::string& name, int version,
65 int priority, bool enabled, const std::string& kind,
66 const std::string& schemaId, const std::string& metadataJson);
68 [[nodiscard]] eve::Result<PolicyHandle> replace(const std::string& domain, const std::string& name, int version,
69 int priority, bool enabled, const std::string& kind,
70 const std::string& schemaId, const std::string& metadataJson);
72 [[nodiscard]] eve::Result<PolicyHandle> remove(const std::string& domain, const std::string& name);
74 [[nodiscard]] eve::Result<PolicyHandle> enable(const std::string& domain, const std::string& name, bool enabled);
76 [[nodiscard]] eve::ResultRef<const PolicyDescriptor> resolve(const std::string& domain,
77 const std::string& name) const;
79 [[nodiscard]] eve::ResultRef<const PolicyDescriptor> resolveHandle(const PolicyHandle& handle) const;
81 [[nodiscard]] eve::Result<PolicyHandle> handle(const std::string& domain, const std::string& name) const;
83 [[nodiscard]] eve::Result<eve::Generation> generationOf(const std::string& domain, const std::string& name) const;
85 [[nodiscard]] bool isTombstone(const std::string& domain, const std::string& name) const noexcept;
87 [[nodiscard]] bool isStale(const PolicyHandle& handle) const noexcept;
88
90 const PolicyDescriptor* select(const std::string& domain) const;
92 int size() const;
94 int countDomain(const std::string& domain) const;
96 const PolicyDescriptor* at(int index) const;
98 const PolicyDescriptor* atDomain(const std::string& domain, int index) const;
100 int eventCount() const;
102 const PolicyEvent* eventAt(int index) const;
104 void clearEvents();
106 std::string snapshotJson() const;
108 [[nodiscard]] eve::Result<void> restoreJson(const std::string& json);
109
111 [[nodiscard]] eve::Result<eve::SnapshotEnvelope> snapshot(const eve::SnapshotHashProvider& hashProvider) const;
113 [[nodiscard]] eve::Result<void> restoreSnapshot(const eve::SnapshotEnvelope& snapshot,
114 const eve::SnapshotHashProvider& hashProvider);
116 [[nodiscard]] eve::Result<std::string> snapshotEnvelopeJson(const eve::SnapshotHashProvider& hashProvider) const;
118 [[nodiscard]] eve::Result<void> restoreSnapshotJson(std::string_view json,
119 const eve::SnapshotHashProvider& hashProvider);
120
125 [[nodiscard("retain Subscription or explicitly dispose it")]] eve::Subscription subscribe(
126 std::function<void(const PolicyEvent&)> callback);
127
128private:
129 using Key = std::pair<std::string, std::string>;
130 struct EventData {
131 eve::SchemaVersion version;
132 bool enabled = false;
133 };
135
136 static PolicyEvent projectEvent(const Storage::Event& event);
137 static PolicyHandle projectHandle(const Storage::Handle& handle);
138 static Storage::Handle storageHandle(const PolicyHandle& handle);
139 void clearEventProjection() const;
140
141 Storage storage_;
142 eve::PersistentId instanceId_;
143 eve::Revision revision_;
145 mutable std::vector<PolicyEvent> eventProjection_;
146};
147
151bool parseImplementationKind(const std::string& name, ImplementationKind& kind);
152
155public:
160 ~PolicyRegistryModule() override = default;
161
164
165private:
166 std::vector<std::unique_ptr<PolicyRegistry>> registries_;
167};
168
169} // namespace eve::policyregistry
int priority
#define EVENGINE_API_FOUNDATION
每个链接组(link group)各自的导出宏。
Definition Export.h:106
TokenKind kind
std::string name
PrimitiveHandle handle
Versioned, integrity-checked persistence envelopes.
float size
Definition TreeMesh.cpp:156
uint32_t index
std::size_t at
Generation-qualified storage for replaceable, non-ECS registry data.
ViewPreparation callback
EVENGINE_API_FOUNDATION public API.
Definition Module.h:46
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Move-only RAII token that owns one observer registration.
Id128 public API.
Definition Identity.h:112
Script module factory for independent policy registries.
PolicyRegistry * newRegistry()
Allocates a module-owned policy registry.
PolicyRegistryModule()=default
Constructs a PolicyRegistryModule.
~PolicyRegistryModule() override=default
Releases PolicyRegistryModule resources.
Deterministic registry for discoverable, non-executable policy descriptions.
ImplementationKind
Implementation category advertised by a policy descriptor.
std::string implementationKindName(ImplementationKind kind)
Returns the stable lowercase implementation kind name.
bool parseImplementationKind(const std::string &name, ImplementationKind &kind)
Parses a stable lowercase implementation kind name.
std::function< Result< ContentId >(std::string_view canonicalInput)> SnapshotHashProvider
Injected content-digest implementation used by snapshots.
Definition Snapshot.h:36
bool enabled
Stable outer format shared by persistence and cross-process snapshots.
Definition Snapshot.h:46
Discoverable policy description without an executable callback.
Deterministically sequenced policy registry mutation event.
Generation-qualified policy handle used to detect replacement or removal.