[cpp-ue4] Added public methods to process enums in string form (#9569)

* [cpp-ue4] Added public methods to process enums in string form as it may be useful for the user code

* [cpp-ue4] Fixed linker errors in some configurations
This commit is contained in:
Samuel Kahn
2021-05-26 17:33:47 +02:00
committed by GitHub
parent b2041414eb
commit 8134362244
4 changed files with 78 additions and 24 deletions

View File

@@ -35,6 +35,9 @@ public:
{{/enumVars}}
};
{{/allowableValues}}
static FString EnumToString(const {{{enumName}}}& EnumValue);
static bool EnumFromString(const FString& EnumAsString, {{{enumName}}}& EnumValue);
{{#description}}/* {{{description}}} */
{{/description}}{{^required}}TOptional<{{/required}}{{{datatypeWithEnum}}}{{^required}}>{{/required}} {{paramName}}{{#required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{/required}};
{{/isEnum}}

View File

@@ -32,6 +32,28 @@ inline FString ToString(const {{classname}}::{{operationIdCamelCase}}Request::{{
return TEXT("");
}
FString {{classname}}::{{operationIdCamelCase}}Request::EnumToString(const {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}& EnumValue)
{
return ToString(EnumValue);
}
inline bool FromString(const FString& EnumAsString, {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}& Value)
{
static TMap<FString, {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}> StringToEnum = { {{#allowableValues}}{{#enumVars}}
{ TEXT("{{{value}}}"), {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}::{{name}} },{{/enumVars}}{{/allowableValues}} };
const auto Found = StringToEnum.Find(EnumAsString);
if(Found)
Value = *Found;
return Found != nullptr;
}
bool {{classname}}::{{operationIdCamelCase}}Request::EnumFromString(const FString& EnumAsString, {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}& EnumValue)
{
return FromString(EnumAsString, EnumValue);
}
inline FStringFormatArg ToStringFormatArg(const {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}& Value)
{
return FStringFormatArg(ToString(Value));
@@ -48,15 +70,8 @@ inline bool TryGetJsonValue(const TSharedPtr<FJsonValue>& JsonValue, {{classname
FString TmpValue;
if (JsonValue->TryGetString(TmpValue))
{
static TMap<FString, {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}> StringToEnum = { {{#enumVars}}
{ TEXT("{{{value}}}"), {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}::{{name}} },{{/enumVars}} };
const auto Found = StringToEnum.Find(TmpValue);
if(Found)
{
Value = *Found;
if(FromString(TmpValue, Value))
return true;
}
}
{{/allowableValues}}
return false;

View File

@@ -36,6 +36,9 @@ public:
Values Value{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}};
{{/allowableValues}}
static FString EnumToString(const Values& EnumValue);
static bool EnumFromString(const FString& EnumAsString, Values& EnumValue);
{{/isEnum}}
{{^isEnum}}
FString Value{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}};
@@ -51,6 +54,9 @@ public:
{{/enumVars}}
};
{{/allowableValues}}
static FString EnumToString(const {{{enumName}}}& EnumValue);
static bool EnumFromString(const FString& EnumAsString, {{{enumName}}}& EnumValue);
{{#description}}/* {{{description}}} */
{{/description}}{{^required}}TOptional<{{/required}}{{{datatypeWithEnum}}}{{^required}}>{{/required}} {{name}}{{#required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{/required}};
{{/isEnum}}

View File

@@ -28,6 +28,28 @@ inline FString ToString(const {{classname}}::Values& Value)
return TEXT("");
}
FString {{classname}}::EnumToString(const {{classname}}::Values& EnumValue)
{
return ToString(EnumValue);
}
inline bool FromString(const FString& EnumAsString, {{classname}}::Values& Value)
{
static TMap<FString, {{classname}}::Values> StringToEnum = { {{#allowableValues}}{{#enumVars}}
{ TEXT("{{{value}}}"), {{classname}}::Values::{{name}} },{{/enumVars}}{{/allowableValues}} };
const auto Found = StringToEnum.Find(EnumAsString);
if(Found)
Value = *Found;
return Found != nullptr;
}
bool {{classname}}::EnumFromString(const FString& EnumAsString, {{classname}}::Values& EnumValue)
{
return FromString(EnumAsString, EnumValue);
}
inline FStringFormatArg ToStringFormatArg(const {{classname}}::Values& Value)
{
return FStringFormatArg(ToString(Value));
@@ -44,15 +66,8 @@ inline bool TryGetJsonValue(const TSharedPtr<FJsonValue>& JsonValue, {{classname
FString TmpValue;
if (JsonValue->TryGetString(TmpValue))
{
static TMap<FString, {{classname}}::Values> StringToEnum = { {{#enumVars}}
{ TEXT("{{{value}}}"), {{classname}}::Values::{{name}} },{{/enumVars}} };
const auto Found = StringToEnum.Find(TmpValue);
if(Found)
{
Value = *Found;
if(FromString(TmpValue, Value))
return true;
}
}
{{/allowableValues}}
return false;
@@ -78,6 +93,28 @@ inline FString ToString(const {{classname}}::{{{enumName}}}& Value)
return TEXT("");
}
FString {{classname}}::EnumToString(const {{classname}}::{{{enumName}}}& EnumValue)
{
return ToString(EnumValue);
}
inline bool FromString(const FString& EnumAsString, {{classname}}::{{{enumName}}}& Value)
{
static TMap<FString, {{classname}}::{{{enumName}}}> StringToEnum = { {{#allowableValues}}{{#enumVars}}
{ TEXT("{{{value}}}"), {{classname}}::{{{enumName}}}::{{name}} },{{/enumVars}}{{/allowableValues}} };
const auto Found = StringToEnum.Find(EnumAsString);
if(Found)
Value = *Found;
return Found != nullptr;
}
bool {{classname}}::EnumFromString(const FString& EnumAsString, {{classname}}::{{{enumName}}}& EnumValue)
{
return FromString(EnumAsString, EnumValue);
}
inline FStringFormatArg ToStringFormatArg(const {{classname}}::{{{enumName}}}& Value)
{
return FStringFormatArg(ToString(Value));
@@ -94,15 +131,8 @@ inline bool TryGetJsonValue(const TSharedPtr<FJsonValue>& JsonValue, {{classname
FString TmpValue;
if (JsonValue->TryGetString(TmpValue))
{
static TMap<FString, {{classname}}::{{{enumName}}}> StringToEnum = { {{#enumVars}}
{ TEXT("{{{value}}}"), {{classname}}::{{{enumName}}}::{{name}} },{{/enumVars}} };
const auto Found = StringToEnum.Find(TmpValue);
if(Found)
{
Value = *Found;
if(FromString(TmpValue, Value))
return true;
}
}
{{/allowableValues}}
return false;