forked from loafle/openapi-generator-original
[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:
parent
d6e19f8f55
commit
de27749047
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user