Files
whetstone_DSL/editor/src/DroneErrorSynthesis.h
2026-02-17 21:39:37 -07:00

63 lines
2.1 KiB
C++

#pragma once
// Step 636: Error type synthesis for drone
#include <string>
#include <vector>
enum class DroneErrorKind {
MqttError,
NexusError,
ExecutionError,
CapabilityMismatch
};
struct DroneErrorSpec {
DroneErrorKind kind = DroneErrorKind::ExecutionError;
std::string message;
int code = 0;
bool retryable = false;
};
class DroneErrorSynthesis {
public:
static std::string className(DroneErrorKind kind) {
if (kind == DroneErrorKind::MqttError) return "MqttError";
if (kind == DroneErrorKind::NexusError) return "NexusError";
if (kind == DroneErrorKind::ExecutionError) return "ExecutionError";
return "CapabilityMismatch";
}
static std::string toErrorCodeCategory(DroneErrorKind kind) {
if (kind == DroneErrorKind::MqttError) return "mqtt";
if (kind == DroneErrorKind::NexusError) return "nexus";
if (kind == DroneErrorKind::ExecutionError) return "execution";
return "capability";
}
static std::string expectedAlias(DroneErrorKind kind,
const std::string& valueType = "void") {
return "std::expected<" + valueType + ", " + className(kind) + ">";
}
static bool isRetryable(const DroneErrorSpec& spec) {
if (spec.kind == DroneErrorKind::CapabilityMismatch) return false;
if (spec.code < 0) return false;
return spec.retryable;
}
static std::string synthesizeHeader(const std::string& ns = "whetstone") {
if (ns.empty()) return "";
std::string code;
code += "#pragma once\n";
code += "#include <expected>\n";
code += "#include <string>\n\n";
code += "namespace " + ns + " {\n";
code += "struct MqttError { int code = 0; std::string message; };\n";
code += "struct NexusError { int code = 0; std::string message; };\n";
code += "struct ExecutionError { int code = 0; std::string message; };\n";
code += "struct CapabilityMismatch { int code = 0; std::string message; };\n";
code += "} // namespace " + ns + "\n";
return code;
}
};