载入中...
搜索中...
未找到
ConditionCodec.cpp
浏览该文件的文档.
18bool exactFields(const eve::Value::Object& object, std::initializer_list<std::string_view> allowed) {
27eve::Result<std::string> requiredString(const eve::Value::Object& object, std::string_view name) {
32 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "condition field must be a non-empty string",
41 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "condition kind must be a string", "kind", {},
59 eve::DiagnosticCode::InvalidArgument, "unknown condition kind", "kind", {}, "emergence.condition_codec"));
66 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "condition operator must be a string",
96 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "unknown condition determinism level",
107 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "condition children must be an array",
122 return eve::Result<decision::Condition>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument,
127 return eve::Result<decision::Condition>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument,
144 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "not condition requires one child",
150 return eve::Result<decision::Condition>::success(decision::Condition::not_(std::move(values.front())));
162 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "compare requires operator", "operator",
169 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "compare requires expected", "expected",
178 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "leaf condition contains an unknown field",
186 return eve::Result<decision::Condition>::success(decision::Condition::hasAttribute(std::move(name)));
188 return eve::Result<decision::Condition>::success(decision::Condition::hasResource(std::move(name)));
189 return eve::Result<decision::Condition>::success(decision::Condition::authorityCheck(std::move(name)));
194 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "state_equals contains an unknown field",
209 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "policy_call contains an unknown field",
220 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "scriptDeclaration must be an object",
249 decision::Condition::policyCall(std::move(key).takeValue(), std::move(arguments), std::move(declaration)));
252 eve::DiagnosticCode::InvalidArgument, "unsupported condition kind", "kind", {}, "emergence.condition_codec"));
257eve::Result<decision::Condition> decodeCondition(const eve::Value& value) { return decodeNode(value); }
Value/JSON codec for decision::Condition trees owned by emergence rules.
Stable, structured diagnostics shared by engine modules.
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
const T * getIf() const noexcept
Return a typed pointer, or nullptr when the kind differs.
Definition Value.h:180
static Condition hasAttribute(std::string attribute)
Require an attribute to exist.
Definition Condition.cpp:173
static Condition all(std::vector< Condition > children)
Construct a conjunction of child conditions.
Definition Condition.cpp:141
static Condition not_(Condition child)
Construct a logical negation of one child condition.
Definition Condition.cpp:153
static Condition stateEquals(std::string key, Value expected)
Require a named state value to equal the expected value.
Definition Condition.cpp:185
static Condition policyCall(std::string name, Value arguments=Value::Object{}, std::optional< ScriptConditionDeclaration > scriptDeclaration=std::nullopt)
Call a named read-only policy and use its ConditionResult.
Definition Condition.cpp:198
static Condition compare(std::string key, CompareOperator op, Value expected)
Compare a context value against an expected scalar value.
Definition Condition.cpp:159
static Condition authorityCheck(std::string scope)
Require read-only authority for a scope.
Definition Condition.cpp:192
static Condition any(std::vector< Condition > children)
Construct a disjunction of child conditions.
Definition Condition.cpp:147
static Condition hasResource(std::string resource)
Require a resource to exist.
Definition Condition.cpp:179
DeterminismLevel
Determinism contract declared by a script-backed condition policy.
Definition Condition.h:46
Definition ConditionCodec.cpp:10
eve::Result< decision::Condition > decodeCondition(const eve::Value &value)
Decode one validated condition tree from an owning Value.
Definition ConditionCodec.cpp:257
@ InvalidArgument
Metadata a script policy must declare before it is used by a condition.
Definition Condition.h:64
std::vector< std::string > dependencies
Logical state/query names read by the policy.
Definition Condition.h:68