Stream Chat Unreal SDK
Loading...
Searching...
No Matches
Util.h
1// Copyright 2022 Stream.IO, Inc. All Rights Reserved.
2
3#pragma once
4
13namespace Util
14{
16template <typename OutT, typename InT>
17FORCEINLINE OutT Convert(const InT& Input)
18{
19 return static_cast<OutT>(Input);
20}
21
23template <typename OutT, typename InT, typename... TArgs>
24FORCEINLINE OutT Convert(const InT& Input, TArgs... Args)
25{
26 return OutT{Input, Args...};
27}
28
30template <typename OutT, typename InT>
31FORCEINLINE TOptional<OutT> Convert(const TOptional<InT>& Input)
32{
33 if (Input.IsSet())
34 {
35 return TOptional<OutT>{static_cast<OutT>(Input.GetValue())};
36 }
37 return {};
38}
39
41template <typename OutT, typename InT>
42FORCEINLINE TOptional<OutT> Convert(const InT* Input)
43{
44 if (Input != nullptr)
45 {
46 return TOptional<OutT>{static_cast<OutT>(*Input)};
47 }
48 return {};
49}
50
52template <typename OutT, typename InT>
53FORCEINLINE TOptional<TArray<OutT>> Convert(const TOptional<TArray<InT>>& Input)
54{
55 if (Input.IsSet())
56 {
57 return TOptional<TArray<OutT>>{Util::Convert<OutT, InT>(Input.GetValue())};
58 }
59 return {};
60}
61
63template <typename OutT, typename InT>
64FORCEINLINE TArray<OutT> Convert(const TArray<InT>& Input)
65{
66 TArray<OutT> Output;
67 Output.Reserve(Input.Num());
68 for (const InT& Value : Input)
69 {
70 Output.Emplace(static_cast<OutT>(Value));
71 }
72 return Output;
73}
74
76template <typename OutT, typename InT, typename... TArgs>
77FORCEINLINE TArray<OutT> Convert(const TArray<InT>& Input, TArgs... Args)
78{
79 TArray<OutT> Output;
80 Output.Reserve(Input.Num());
81 for (const InT& Value : Input)
82 {
83 Output.Emplace(OutT{Value, Args...});
84 }
85 return Output;
86}
87} // namespace Util
Helpers for DTO conversion.
Definition: Util.h:14
FORCEINLINE OutT Convert(const InT &Input)
Map from one type to an another using direct initialization.
Definition: Util.h:17