载入中...
搜索中...
未找到
DialogueSequence.cpp
浏览该文件的文档.
23 if (!value.isObject()) return eve::Result<eve::StateMutation>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "state mutation must be an object",
27 return eve::Result<eve::StateMutation>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "unknown state mutation field '" + key + "'",
36 return eve::Result<eve::StateMutation>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "state mutation subject must be a non-empty string",
39 return eve::Result<eve::StateMutation>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "state mutation key must be a non-empty string",
42 return eve::Result<eve::StateMutation>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "state mutation kind must be a string",
59 return eve::Result<eve::StateMutation>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "unsupported state mutation kind '" + kind->asString() + "'",
62 const bool needsValue = mutation.kind == eve::MutationKind::Set || mutation.kind == eve::MutationKind::AddNumber;
64 return eve::Result<eve::StateMutation>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "state mutation requires value",
67 return eve::Result<eve::StateMutation>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "state mutation kind does not accept value",
72 return eve::Result<eve::StateMutation>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "state mutation persistent must be boolean",
93 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "dialogue command requires a non-empty name",
96 if (kind && (!kind->isString() || (kind->asString() != "operation" && kind->asString() != "gameplay")))
97 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "dialogue command kind must be operation or gameplay",
113std::string sequenceRoutePayloadString(const eve::dnut::SequenceRoute& route, std::string_view key) {
119 if (!payload.isObject()) return eve::Result<PaymentSpec>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "dialogue payload must be an object",
126eve::Result<std::vector<eve::StateMutation>> decodeSequenceStateMutations(const eve::Value& payload) {
128 return eve::Result<std::vector<eve::StateMutation>>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "dialogue payload must be an object",
133 return eve::Result<std::vector<eve::StateMutation>>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "stateMutations must be an array",
139 if (!mutation.ok()) return eve::Result<std::vector<eve::StateMutation>>::failure(mutation.status());
173 {StepField{"speaker", StepFieldType::String, false}, StepField{"text", StepFieldType::String, false},
174 StepField{"pool", StepFieldType::String, false}, StepField{"i18n", StepFieldType::String, false},
175 StepField{"voice", StepFieldType::String, false}, StepField{"expression", StepFieldType::String, false}}});
185 {StepField{"name", StepFieldType::String, false}, StepField{"target", StepFieldType::String, false},
186 StepField{"kind", StepFieldType::String, false}, StepField{"arguments", StepFieldType::Any, false},
187 StepField{"payment", StepFieldType::Any, false}, StepField{"stateMutations", StepFieldType::Any, false},
204 if (node.type != "command" && (node.payload.find("payment") || node.payload.find("stateMutations")))
205 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "payment and stateMutations are valid only on command nodes",
208 if (node.type != "choice" && (route.payload.find("payment") || route.payload.find("stateMutations")))
209 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "payment and stateMutations are valid only on choice routes",
215eve::Result<CommandRequest> decodeDialogueCommandRequest(const eve::dnut::SequenceCommandRequest& request) {
223 decoded.kind = kind && kind->isString() && kind->asString() == "gameplay" ? CommandRequestKind::GameplayAction
Dialogue payload codecs for L1 sequence assets.
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
void set(const std::string &key, Value value)
Insert or replace an object member.
Definition Value.cpp:118
static Value string(std::string value)
Compatibility factory for a string value.
Definition Value.h:110
bool asBool() const
Return the boolean payload; the caller must have checked the kind.
Definition Value.cpp:81
Value * find(const std::string &key) noexcept
Return an object member, or nullptr when absent.
Definition Value.cpp:124
Canonical step vocabulary owner and runtime handler router.
Definition StepKindRegistry.h:108
eve::Result< void > registerStep(StepKindDescriptor descriptor)
Declare one step type.
Definition StepKindRegistry.cpp:52
eve::Result< void > validate(const SequenceNode &node) const
Validate one node against its declared payload schema.
Definition StepKindRegistry.cpp:103
bool contains(std::string_view type) const
Return whether type is declared.
Definition StepKindRegistry.cpp:87
Definition ConversationAuthoring.cpp:12
@ GameplayAction
@ Operation
eve::Result< std::vector< eve::StateMutation > > decodeSequenceStateMutations(const eve::Value &payload)
Decode dialogue state mutations from one canonical payload object.
Definition DialogueSequence.cpp:126
eve::Result< CommandRequest > decodeDialogueCommandRequest(const eve::dnut::SequenceCommandRequest &request)
Adapt an L1 command request to dialogue's transaction-bearing request.
Definition DialogueSequence.cpp:215
std::string sequenceRoutePayloadString(const eve::dnut::SequenceRoute &route, std::string_view key)
Read an optional string from a route payload; missing or ill-typed values yield empty.
Definition DialogueSequence.cpp:113
std::string sequencePayloadString(const eve::dnut::SequenceNode &node, std::string_view key)
Read an optional string from a node payload; missing or ill-typed values yield empty.
Definition DialogueSequence.cpp:108
eve::Result< PaymentSpec > decodeSequencePayment(const eve::Value &payload)
Decode an optional dialogue payment from one canonical payload object.
Definition DialogueSequence.cpp:118
eve::Result< void > validateDialogueSequenceAsset(const eve::dnut::SequenceAsset &asset, const eve::dnut::StepKindRegistry ®istry)
Validate every dialogue-owned payload without taking control-flow ownership.
Definition DialogueSequence.cpp:195
eve::Result< void > registerDialogueSequenceSteps(eve::dnut::StepKindRegistry ®istry)
Register dialogue's line, choice, and command contracts and validators.
Definition DialogueSequence.cpp:161
eve::Value encodeSequenceStateMutations(std::span< const eve::StateMutation > mutations)
Encode dialogue state mutations as the canonical payload array.
Definition DialogueSequence.cpp:145
StepShape
Declares whether a step completes inside its call or suspends the runtime.
Definition StepKindRegistry.h:20
@ InvalidArgument
Immutable request emitted by a command node.
Definition DialogueState.h:38
PaymentSpec payment
Optional atomic money/reputation payment for this command.
Definition DialogueState.h:47
std::vector< eve::StateMutation > stateMutations
Optional StatePatch mutations committed in the same transaction.
Definition DialogueState.h:49
std::string requestId
Stable identifier for this exact suspended command execution.
Definition DialogueState.h:40
Canonical money/reputation cost attached to a dialogue choice or command.
Definition DialoguePayment.h:36
static eve::Result< PaymentSpec > fromValue(const eve::Value &value)
Parse { "money": n, "reputation": n } from canonical Value.
Definition DialoguePayment.cpp:89
Immutable, parameterized and versioned compiled sequence.
Definition SequenceAsset.h:77
eve::Result< void > validate() const
Validate stable identifiers, the entry point and every graph reference.
Definition SequenceAsset.cpp:36
Immutable request emitted by a generic command node.
Definition SequenceRuntime.h:33
Owning authoring/runtime contract for one step type.
Definition StepKindRegistry.h:45
One immutable mutation request owned by its caller.
Definition StateAccess.h:42