Goran Lazarevski 669cf5383b Lucky World source code
2025-03-18 19:25:25 +01:00

211 lines
3.4 KiB
C++

// Copyright 2014-2019 Vladimir Alyamkin. All Rights Reserved.
#include "VaRestJsonValue.h"
#include "VaRestDefines.h"
#include "VaRestJsonObject.h"
UVaRestJsonValue::UVaRestJsonValue(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
}
void UVaRestJsonValue::Reset()
{
JsonVal = nullptr;
}
TSharedPtr<FJsonValue>& UVaRestJsonValue::GetRootValue()
{
return JsonVal;
}
void UVaRestJsonValue::SetRootValue(TSharedPtr<FJsonValue>& JsonValue)
{
JsonVal = JsonValue;
}
//////////////////////////////////////////////////////////////////////////
// FJsonValue API
EVaJson UVaRestJsonValue::GetType() const
{
if (!JsonVal.IsValid())
{
return EVaJson::None;
}
switch (JsonVal->Type)
{
case EJson::None:
return EVaJson::None;
case EJson::Null:
return EVaJson::Null;
case EJson::String:
return EVaJson::String;
case EJson::Number:
return EVaJson::Number;
case EJson::Boolean:
return EVaJson::Boolean;
case EJson::Array:
return EVaJson::Array;
case EJson::Object:
return EVaJson::Object;
default:
return EVaJson::None;
}
}
FString UVaRestJsonValue::GetTypeString() const
{
if (!JsonVal.IsValid())
{
return "None";
}
switch (JsonVal->Type)
{
case EJson::None:
return TEXT("None");
case EJson::Null:
return TEXT("Null");
case EJson::String:
return TEXT("String");
case EJson::Number:
return TEXT("Number");
case EJson::Boolean:
return TEXT("Boolean");
case EJson::Array:
return TEXT("Array");
case EJson::Object:
return TEXT("Object");
default:
return TEXT("None");
}
}
bool UVaRestJsonValue::IsNull() const
{
if (!JsonVal.IsValid())
{
return true;
}
return JsonVal->IsNull();
}
float UVaRestJsonValue::AsNumber() const
{
if (!JsonVal.IsValid())
{
ErrorMessage(TEXT("Number"));
return 0.f;
}
return static_cast<float>(JsonVal->AsNumber());
}
int32 UVaRestJsonValue::AsInt32() const
{
if (!JsonVal.IsValid())
{
ErrorMessage(TEXT("Number"));
return 0.f;
}
return static_cast<int32>(JsonVal->AsNumber());
}
int64 UVaRestJsonValue::AsInt64() const
{
if (!JsonVal.IsValid())
{
ErrorMessage(TEXT("Number"));
return 0.f;
}
return static_cast<int64>(JsonVal->AsNumber());
}
FString UVaRestJsonValue::AsString() const
{
if (!JsonVal.IsValid())
{
ErrorMessage(TEXT("String"));
return FString();
}
return JsonVal->AsString();
}
bool UVaRestJsonValue::AsBool() const
{
if (!JsonVal.IsValid())
{
ErrorMessage(TEXT("Boolean"));
return false;
}
return JsonVal->AsBool();
}
TArray<UVaRestJsonValue*> UVaRestJsonValue::AsArray() const
{
TArray<UVaRestJsonValue*> OutArray;
if (!JsonVal.IsValid())
{
ErrorMessage(TEXT("Array"));
return OutArray;
}
TArray<TSharedPtr<FJsonValue>> ValArray = JsonVal->AsArray();
for (auto Value : ValArray)
{
UVaRestJsonValue* NewValue = NewObject<UVaRestJsonValue>();
NewValue->SetRootValue(Value);
OutArray.Add(NewValue);
}
return OutArray;
}
UVaRestJsonObject* UVaRestJsonValue::AsObject()
{
if (!JsonVal.IsValid())
{
ErrorMessage(TEXT("Object"));
return nullptr;
}
const TSharedPtr<FJsonObject> NewObj = JsonVal->AsObject();
UVaRestJsonObject* JsonObj = NewObject<UVaRestJsonObject>();
JsonObj->SetRootObject(NewObj);
return JsonObj;
}
//////////////////////////////////////////////////////////////////////////
// Helpers
void UVaRestJsonValue::ErrorMessage(const FString& InType) const
{
UE_LOG(LogVaRest, Error, TEXT("Json Value of type '%s' used as a '%s'."), *GetTypeString(), *InType);
}