Preserve approved pixel tower prototype as development baseline
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
class_name CommandResult
|
||||
extends RefCounted
|
||||
|
||||
enum Code {
|
||||
OK,
|
||||
INVALID_COMMAND,
|
||||
INVALID_PAYLOAD,
|
||||
DUPLICATE_COMMAND_ID,
|
||||
DUPLICATE_IDEMPOTENCY_KEY,
|
||||
NOT_FOUND,
|
||||
VALIDATION_FAILED,
|
||||
TRANSACTION_CLOSED,
|
||||
TRANSACTION_APPLY_FAILED,
|
||||
EXECUTOR_FAILED,
|
||||
}
|
||||
|
||||
var code: Code = Code.OK
|
||||
var command_id := 0
|
||||
var target_id: StringName = &""
|
||||
var message := ""
|
||||
var resolution_hints: Array[String] = []
|
||||
var details: Dictionary = {}
|
||||
var is_replay := false
|
||||
|
||||
|
||||
func _init(
|
||||
p_code: Code = Code.OK,
|
||||
p_command_id: int = 0,
|
||||
p_message: String = "",
|
||||
p_details: Dictionary = {}
|
||||
) -> void:
|
||||
code = p_code
|
||||
command_id = p_command_id
|
||||
message = p_message
|
||||
details = p_details.duplicate(true)
|
||||
|
||||
|
||||
static func succeeded(
|
||||
p_command_id: int = 0,
|
||||
p_details: Dictionary = {}
|
||||
) -> CommandResult:
|
||||
return CommandResult.new(Code.OK, p_command_id, "", p_details)
|
||||
|
||||
|
||||
static func failed(
|
||||
p_code: Code,
|
||||
p_command_id: int,
|
||||
p_message: String,
|
||||
p_details: Dictionary = {}
|
||||
) -> CommandResult:
|
||||
assert(p_code != Code.OK, "Use CommandResult.succeeded() for a successful result.")
|
||||
return CommandResult.new(p_code, p_command_id, p_message, p_details)
|
||||
|
||||
|
||||
func is_success() -> bool:
|
||||
return code == Code.OK
|
||||
|
||||
|
||||
func copy() -> CommandResult:
|
||||
var result := CommandResult.new(code, command_id, message, details)
|
||||
result.target_id = target_id
|
||||
result.resolution_hints.assign(resolution_hints)
|
||||
result.is_replay = is_replay
|
||||
return result
|
||||
|
||||
|
||||
func replay_copy() -> CommandResult:
|
||||
var result := copy()
|
||||
result.is_replay = true
|
||||
return result
|
||||
|
||||
|
||||
func to_dictionary() -> Dictionary:
|
||||
return {
|
||||
"code": Code.keys()[code],
|
||||
"command_id": command_id,
|
||||
"target_id": String(target_id),
|
||||
"message": message,
|
||||
"resolution_hints": resolution_hints.duplicate(),
|
||||
"details": details.duplicate(true),
|
||||
"is_replay": is_replay,
|
||||
}
|
||||
|
||||
|
||||
static func from_dictionary(data: Dictionary) -> CommandResult:
|
||||
var code_name := String(data.get("code", "INVALID_COMMAND"))
|
||||
var parsed_code := Code.INVALID_COMMAND
|
||||
var code_names := Code.keys()
|
||||
var code_index := code_names.find(code_name)
|
||||
if code_index >= 0:
|
||||
parsed_code = code_index as Code
|
||||
var result := CommandResult.new(
|
||||
parsed_code,
|
||||
int(data.get("command_id", 0)),
|
||||
String(data.get("message", "")),
|
||||
data.get("details", {}) as Dictionary
|
||||
)
|
||||
result.target_id = StringName(data.get("target_id", ""))
|
||||
var saved_hints: Variant = data.get("resolution_hints", [])
|
||||
if saved_hints is Array:
|
||||
for hint: Variant in saved_hints:
|
||||
result.resolution_hints.append(String(hint))
|
||||
result.is_replay = bool(data.get("is_replay", false))
|
||||
return result
|
||||
Reference in New Issue
Block a user