[cpp-ue4] Fix byte array writing in JSON to be valid base64 string (#15242)

* Fix byte array writing in JSON to be valid base64 string
- remove ToStringFormatArg
- use ToUrlString to path parameters
- use Base64UrlEncode only in ToUrlString

* Use LexToString instead of FString::Format
This commit is contained in:
Jaemin Park 2023-04-25 01:21:27 +09:00 committed by GitHub
parent d6e19f8f55
commit de27749047
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 70 additions and 138 deletions

View File

@ -54,11 +54,6 @@ bool {{classname}}::{{operationIdCamelCase}}Request::EnumFromString(const FStrin
return FromString(EnumAsString, EnumValue);
}
inline FStringFormatArg ToStringFormatArg(const {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}& Value)
{
return FStringFormatArg(ToString(Value));
}
inline void WriteJsonValue(JsonWriter& Writer, const {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}& Value)
{
WriteJsonValue(Writer, ToString(Value));
@ -86,7 +81,7 @@ FString {{classname}}::{{operationIdCamelCase}}Request::ComputePath() const
{{/pathParams.0}}
{{#pathParams.0}}
TMap<FString, FStringFormatArg> PathParams = { {{#pathParams}}
{ TEXT("{{baseName}}"), ToStringFormatArg({{paramName}}) }{{^-last}},{{/-last}}{{/pathParams}} };
{ TEXT("{{baseName}}"), FStringFormatArg(ToUrlString({{paramName}})) }{{^-last}},{{/-last}}{{/pathParams}} };
FString Path = FString::Format(TEXT("{{{path}}}"), PathParams);

View File

@ -94,57 +94,18 @@ FString Base64UrlEncode(const T& Value)
return Base64String;
}
template<typename T, typename std::enable_if<!std::is_base_of<Model, T>::value, int>::type = 0>
inline FStringFormatArg ToStringFormatArg(const T& Value)
template<typename T>
inline auto ToString(const T& Value)
-> typename std::enable_if<std::is_same<decltype(::LexToString(Value)), FString>::value, FString>::type
{
return FStringFormatArg(Value);
return ::LexToString(Value);
}
template<typename T, typename std::enable_if<std::is_base_of<Model, T>::value, int>::type = 0>
inline FStringFormatArg ToStringFormatArg(const T& EnumModelValue)
template<typename T>
inline auto ToString(const T& EnumModelValue)
-> typename std::enable_if<std::is_same<decltype(T::EnumToString(EnumModelValue.Value)), FString>::value, FString>::type
{
return FStringFormatArg(T::EnumToString(EnumModelValue.Value));
}
inline FStringFormatArg ToStringFormatArg(const FDateTime& Value)
{
return FStringFormatArg(Value.ToIso8601());
}
inline FStringFormatArg ToStringFormatArg(const FGuid& Value)
{
return FStringFormatArg(Value.ToString(EGuidFormats::DigitsWithHyphens));
}
inline FStringFormatArg ToStringFormatArg(const TArray<uint8>& Value)
{
return FStringFormatArg(Base64UrlEncode(Value));
}
template<typename T, typename std::enable_if<!std::is_base_of<Model, T>::value, int>::type = 0>
inline FString ToString(const T& Value)
{
return FString::Format(TEXT("{0}"), { ToStringFormatArg(Value) });
}
inline FString ToString(const FString& Value)
{
return Value;
}
inline FString ToString(bool Value)
{
return Value ? TEXT("true") : TEXT("false");
}
inline FStringFormatArg ToStringFormatArg(bool Value)
{
return FStringFormatArg(ToString(Value));
}
inline FString ToString(const TArray<uint8>& Value)
{
return Base64UrlEncode(Value);
return T::EnumToString(EnumModelValue.Value);
}
inline FString ToString(const Model& Value)
@ -156,12 +117,32 @@ inline FString ToString(const Model& Value)
return String;
}
inline FString ToString(const FDateTime& Value)
{
return Value.ToIso8601();
}
inline FString ToString(const FGuid& Value)
{
return Value.ToString(EGuidFormats::DigitsWithHyphens);
}
inline FString ToString(const TArray<uint8>& Value)
{
return FBase64::Encode(Value);
}
template<typename T>
inline FString ToUrlString(const T& Value)
{
return FPlatformHttp::UrlEncode(ToString(Value));
}
inline FString ToUrlString(const TArray<uint8>& Value)
{
return Base64UrlEncode(Value);
}
template<typename T>
inline FString CollectionToUrlString(const TArray<T>& Collection, const TCHAR* Separator)
{
@ -246,7 +227,7 @@ inline void WriteJsonValue(JsonWriter& Writer, const TSharedPtr<FJsonObject>& Va
inline void WriteJsonValue(JsonWriter& Writer, const TArray<uint8>& Value)
{
Writer->WriteValue(ToString(Value));
Writer->WriteValue(FBase64::Encode(Value));
}
inline void WriteJsonValue(JsonWriter& Writer, const FDateTime& Value)
@ -365,7 +346,7 @@ inline bool TryGetJsonValue(const TSharedPtr<FJsonValue>& JsonValue, TArray<uint
FString TmpValue;
if (JsonValue->TryGetString(TmpValue))
{
Base64UrlDecode(TmpValue, Value);
FBase64::Decode(TmpValue, Value);
return true;
}
else

View File

@ -50,11 +50,6 @@ bool {{classname}}::EnumFromString(const FString& EnumAsString, {{classname}}::V
return FromString(EnumAsString, EnumValue);
}
inline FStringFormatArg ToStringFormatArg(const {{classname}}::Values& Value)
{
return FStringFormatArg(ToString(Value));
}
inline void WriteJsonValue(JsonWriter& Writer, const {{classname}}::Values& Value)
{
WriteJsonValue(Writer, ToString(Value));
@ -115,11 +110,6 @@ bool {{classname}}::EnumFromString(const FString& EnumAsString, {{classname}}::{
return FromString(EnumAsString, EnumValue);
}
inline FStringFormatArg ToStringFormatArg(const {{classname}}::{{{enumName}}}& Value)
{
return FStringFormatArg(ToString(Value));
}
inline void WriteJsonValue(JsonWriter& Writer, const {{classname}}::{{{enumName}}}& Value)
{
WriteJsonValue(Writer, ToString(Value));

View File

@ -60,11 +60,6 @@ bool OpenAPIOrder::EnumFromString(const FString& EnumAsString, OpenAPIOrder::Sta
return FromString(EnumAsString, EnumValue);
}
inline FStringFormatArg ToStringFormatArg(const OpenAPIOrder::StatusEnum& Value)
{
return FStringFormatArg(ToString(Value));
}
inline void WriteJsonValue(JsonWriter& Writer, const OpenAPIOrder::StatusEnum& Value)
{
WriteJsonValue(Writer, ToString(Value));

View File

@ -60,11 +60,6 @@ bool OpenAPIPet::EnumFromString(const FString& EnumAsString, OpenAPIPet::StatusE
return FromString(EnumAsString, EnumValue);
}
inline FStringFormatArg ToStringFormatArg(const OpenAPIPet::StatusEnum& Value)
{
return FStringFormatArg(ToString(Value));
}
inline void WriteJsonValue(JsonWriter& Writer, const OpenAPIPet::StatusEnum& Value)
{
WriteJsonValue(Writer, ToString(Value));

View File

@ -82,7 +82,7 @@ bool OpenAPIPetApi::AddPetResponse::FromJson(const TSharedPtr<FJsonValue>& JsonV
FString OpenAPIPetApi::DeletePetRequest::ComputePath() const
{
TMap<FString, FStringFormatArg> PathParams = {
{ TEXT("petId"), ToStringFormatArg(PetId) } };
{ TEXT("petId"), FStringFormatArg(ToUrlString(PetId)) } };
FString Path = FString::Format(TEXT("/pet/{petId}"), PathParams);
@ -160,11 +160,6 @@ bool OpenAPIPetApi::FindPetsByStatusRequest::EnumFromString(const FString& EnumA
return FromString(EnumAsString, EnumValue);
}
inline FStringFormatArg ToStringFormatArg(const OpenAPIPetApi::FindPetsByStatusRequest::StatusEnum& Value)
{
return FStringFormatArg(ToString(Value));
}
inline void WriteJsonValue(JsonWriter& Writer, const OpenAPIPetApi::FindPetsByStatusRequest::StatusEnum& Value)
{
WriteJsonValue(Writer, ToString(Value));
@ -262,7 +257,7 @@ bool OpenAPIPetApi::FindPetsByTagsResponse::FromJson(const TSharedPtr<FJsonValue
FString OpenAPIPetApi::GetPetByIdRequest::ComputePath() const
{
TMap<FString, FStringFormatArg> PathParams = {
{ TEXT("petId"), ToStringFormatArg(PetId) } };
{ TEXT("petId"), FStringFormatArg(ToUrlString(PetId)) } };
FString Path = FString::Format(TEXT("/pet/{petId}"), PathParams);
@ -365,7 +360,7 @@ bool OpenAPIPetApi::UpdatePetResponse::FromJson(const TSharedPtr<FJsonValue>& Js
FString OpenAPIPetApi::UpdatePetWithFormRequest::ComputePath() const
{
TMap<FString, FStringFormatArg> PathParams = {
{ TEXT("petId"), ToStringFormatArg(PetId) } };
{ TEXT("petId"), FStringFormatArg(ToUrlString(PetId)) } };
FString Path = FString::Format(TEXT("/pet/{petId}"), PathParams);
@ -453,7 +448,7 @@ bool OpenAPIPetApi::UpdatePetWithFormResponse::FromJson(const TSharedPtr<FJsonVa
FString OpenAPIPetApi::UploadFileRequest::ComputePath() const
{
TMap<FString, FStringFormatArg> PathParams = {
{ TEXT("petId"), ToStringFormatArg(PetId) } };
{ TEXT("petId"), FStringFormatArg(ToUrlString(PetId)) } };
FString Path = FString::Format(TEXT("/pet/{petId}/uploadImage"), PathParams);

View File

@ -26,7 +26,7 @@ namespace OpenAPI
FString OpenAPIStoreApi::DeleteOrderRequest::ComputePath() const
{
TMap<FString, FStringFormatArg> PathParams = {
{ TEXT("orderId"), ToStringFormatArg(OrderId) } };
{ TEXT("orderId"), FStringFormatArg(ToUrlString(OrderId)) } };
FString Path = FString::Format(TEXT("/store/order/{orderId}"), PathParams);
@ -95,7 +95,7 @@ bool OpenAPIStoreApi::GetInventoryResponse::FromJson(const TSharedPtr<FJsonValue
FString OpenAPIStoreApi::GetOrderByIdRequest::ComputePath() const
{
TMap<FString, FStringFormatArg> PathParams = {
{ TEXT("orderId"), ToStringFormatArg(OrderId) } };
{ TEXT("orderId"), FStringFormatArg(ToUrlString(OrderId)) } };
FString Path = FString::Format(TEXT("/store/order/{orderId}"), PathParams);

View File

@ -197,7 +197,7 @@ bool OpenAPIUserApi::CreateUsersWithListInputResponse::FromJson(const TSharedPtr
FString OpenAPIUserApi::DeleteUserRequest::ComputePath() const
{
TMap<FString, FStringFormatArg> PathParams = {
{ TEXT("username"), ToStringFormatArg(Username) } };
{ TEXT("username"), FStringFormatArg(ToUrlString(Username)) } };
FString Path = FString::Format(TEXT("/user/{username}"), PathParams);
@ -235,7 +235,7 @@ bool OpenAPIUserApi::DeleteUserResponse::FromJson(const TSharedPtr<FJsonValue>&
FString OpenAPIUserApi::GetUserByNameRequest::ComputePath() const
{
TMap<FString, FStringFormatArg> PathParams = {
{ TEXT("username"), ToStringFormatArg(Username) } };
{ TEXT("username"), FStringFormatArg(ToUrlString(Username)) } };
FString Path = FString::Format(TEXT("/user/{username}"), PathParams);
@ -348,7 +348,7 @@ bool OpenAPIUserApi::LogoutUserResponse::FromJson(const TSharedPtr<FJsonValue>&
FString OpenAPIUserApi::UpdateUserRequest::ComputePath() const
{
TMap<FString, FStringFormatArg> PathParams = {
{ TEXT("username"), ToStringFormatArg(Username) } };
{ TEXT("username"), FStringFormatArg(ToUrlString(Username)) } };
FString Path = FString::Format(TEXT("/user/{username}"), PathParams);

View File

@ -103,57 +103,18 @@ FString Base64UrlEncode(const T& Value)
return Base64String;
}
template<typename T, typename std::enable_if<!std::is_base_of<Model, T>::value, int>::type = 0>
inline FStringFormatArg ToStringFormatArg(const T& Value)
template<typename T>
inline auto ToString(const T& Value)
-> typename std::enable_if<std::is_same<decltype(::LexToString(Value)), FString>::value, FString>::type
{
return FStringFormatArg(Value);
return ::LexToString(Value);
}
template<typename T, typename std::enable_if<std::is_base_of<Model, T>::value, int>::type = 0>
inline FStringFormatArg ToStringFormatArg(const T& EnumModelValue)
template<typename T>
inline auto ToString(const T& EnumModelValue)
-> typename std::enable_if<std::is_same<decltype(T::EnumToString(EnumModelValue.Value)), FString>::value, FString>::type
{
return FStringFormatArg(T::EnumToString(EnumModelValue.Value));
}
inline FStringFormatArg ToStringFormatArg(const FDateTime& Value)
{
return FStringFormatArg(Value.ToIso8601());
}
inline FStringFormatArg ToStringFormatArg(const FGuid& Value)
{
return FStringFormatArg(Value.ToString(EGuidFormats::DigitsWithHyphens));
}
inline FStringFormatArg ToStringFormatArg(const TArray<uint8>& Value)
{
return FStringFormatArg(Base64UrlEncode(Value));
}
template<typename T, typename std::enable_if<!std::is_base_of<Model, T>::value, int>::type = 0>
inline FString ToString(const T& Value)
{
return FString::Format(TEXT("{0}"), { ToStringFormatArg(Value) });
}
inline FString ToString(const FString& Value)
{
return Value;
}
inline FString ToString(bool Value)
{
return Value ? TEXT("true") : TEXT("false");
}
inline FStringFormatArg ToStringFormatArg(bool Value)
{
return FStringFormatArg(ToString(Value));
}
inline FString ToString(const TArray<uint8>& Value)
{
return Base64UrlEncode(Value);
return T::EnumToString(EnumModelValue.Value);
}
inline FString ToString(const Model& Value)
@ -165,12 +126,32 @@ inline FString ToString(const Model& Value)
return String;
}
inline FString ToString(const FDateTime& Value)
{
return Value.ToIso8601();
}
inline FString ToString(const FGuid& Value)
{
return Value.ToString(EGuidFormats::DigitsWithHyphens);
}
inline FString ToString(const TArray<uint8>& Value)
{
return FBase64::Encode(Value);
}
template<typename T>
inline FString ToUrlString(const T& Value)
{
return FPlatformHttp::UrlEncode(ToString(Value));
}
inline FString ToUrlString(const TArray<uint8>& Value)
{
return Base64UrlEncode(Value);
}
template<typename T>
inline FString CollectionToUrlString(const TArray<T>& Collection, const TCHAR* Separator)
{
@ -255,7 +236,7 @@ inline void WriteJsonValue(JsonWriter& Writer, const TSharedPtr<FJsonObject>& Va
inline void WriteJsonValue(JsonWriter& Writer, const TArray<uint8>& Value)
{
Writer->WriteValue(ToString(Value));
Writer->WriteValue(FBase64::Encode(Value));
}
inline void WriteJsonValue(JsonWriter& Writer, const FDateTime& Value)
@ -374,7 +355,7 @@ inline bool TryGetJsonValue(const TSharedPtr<FJsonValue>& JsonValue, TArray<uint
FString TmpValue;
if (JsonValue->TryGetString(TmpValue))
{
Base64UrlDecode(TmpValue, Value);
FBase64::Decode(TmpValue, Value);
return true;
}
else