Add MCPErrorCallback. Simplify error handling.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user