Add MCPErrorCallback. Simplify error handling.

This commit is contained in:
2026-03-07 01:55:32 -05:00
parent b7b28e9336
commit 282ee3ef33
13 changed files with 134 additions and 180 deletions

View File

@@ -78,6 +78,22 @@ extern int32 TrySavePackageSEH(
FSavePackageArgs* SaveArgs, ESavePackageResult* OutResult);
#endif
// ============================================================
// MCPErrorCallback
// ============================================================
MCPErrorCallback::MCPErrorCallback(std::nullptr_t)
: Func([](const FString&) {})
{}
MCPErrorCallback::MCPErrorCallback(FString& OutError)
: Func([&OutError](const FString& Msg) { OutError = Msg; })
{}
MCPErrorCallback::MCPErrorCallback(FJsonObject* Result)
: Func([Result](const FString& Msg) { MCPUtils::MakeErrorJson(Result, Msg); })
{}
// ============================================================
// JSON helpers
// ============================================================
@@ -703,7 +719,7 @@ UClass* MCPUtils::FindClassByName(const FString& ClassName)
}
bool MCPUtils::ResolveTypeFromString(
const FString& TypeName, FEdGraphPinType& OutPinType, FString& OutError)
const FString& TypeName, FEdGraphPinType& OutPinType, MCPErrorCallback Error)
{
FString TypeLower = TypeName.ToLower();
@@ -776,7 +792,7 @@ bool MCPUtils::ResolveTypeFromString(
UClass* FoundClass = FindClassByName(ClassName);
if (!FoundClass)
{
OutError = FString::Printf(TEXT("Class '%s' not found for object reference type"), *ClassName);
Error.SetError(FString::Printf(TEXT("Class '%s' not found for object reference type"), *ClassName));
return false;
}
OutPinType.PinCategory = UEdGraphSchema_K2::PC_Object;
@@ -788,7 +804,7 @@ bool MCPUtils::ResolveTypeFromString(
UClass* FoundClass = FindClassByName(ClassName);
if (!FoundClass)
{
OutError = FString::Printf(TEXT("Class '%s' not found for soft object reference type"), *ClassName);
Error.SetError(FString::Printf(TEXT("Class '%s' not found for soft object reference type"), *ClassName));
return false;
}
OutPinType.PinCategory = UEdGraphSchema_K2::PC_SoftObject;
@@ -800,7 +816,7 @@ bool MCPUtils::ResolveTypeFromString(
UClass* FoundClass = FindClassByName(ClassName);
if (!FoundClass)
{
OutError = FString::Printf(TEXT("Class '%s' not found for class reference type (TSubclassOf)"), *ClassName);
Error.SetError(FString::Printf(TEXT("Class '%s' not found for class reference type (TSubclassOf)"), *ClassName));
return false;
}
OutPinType.PinCategory = UEdGraphSchema_K2::PC_Class;
@@ -812,7 +828,7 @@ bool MCPUtils::ResolveTypeFromString(
UClass* FoundClass = FindClassByName(ClassName);
if (!FoundClass)
{
OutError = FString::Printf(TEXT("Class '%s' not found for soft class reference type"), *ClassName);
Error.SetError(FString::Printf(TEXT("Class '%s' not found for soft class reference type"), *ClassName));
return false;
}
OutPinType.PinCategory = UEdGraphSchema_K2::PC_SoftClass;
@@ -824,7 +840,7 @@ bool MCPUtils::ResolveTypeFromString(
UClass* FoundClass = FindClassByName(ClassName);
if (!FoundClass)
{
OutError = FString::Printf(TEXT("Class '%s' not found for interface reference type"), *ClassName);
Error.SetError(FString::Printf(TEXT("Class '%s' not found for interface reference type"), *ClassName));
return false;
}
OutPinType.PinCategory = UEdGraphSchema_K2::PC_Interface;
@@ -900,9 +916,9 @@ bool MCPUtils::ResolveTypeFromString(
}
else
{
OutError = FString::Printf(
Error.SetError(FString::Printf(
TEXT("Unknown type '%s'. Use: bool, int, float, string, name, text, byte, vector, rotator, transform, object, a struct/enum name (e.g. FVector, EMyEnum), or colon syntax for references (object:Actor, softobject:Actor, class:Actor, softclass:Actor, interface:MyInterface)"),
*TypeName);
*TypeName));
return false;
}
}