@@ -55,49 +55,49 @@ <h2 id="optional-property">Optional Property<a class="zola-anchor" href="#option
5555< svg class ="octicon " viewBox ="0 0 16 16 " version ="1.1 " width ="16 " height ="16 " aria-hidden ="true "> < path fill-rule ="evenodd " d ="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z "> </ path > </ svg >
5656</ a > </ h2 >
5757< p > Unreal 5.4 introduced optional property that allows you to mark < code > TOptional</ code > fields as < code > UPROPERTY</ code > :</ p >
58- < pre data-lang ="c++ " style ="background-color:#ffffff;color:#4d4d4c; " class ="language-c++ "> < code class ="language-c++ " data-lang ="c++ "> < span style ="color:#999999; "> // DataConfigTests54/Private/DcTestUE54.h</ span > < span style =" color:#999999; " >
59- </ span > < span style ="color:#c82829; "> USTRUCT</ span > < span > ()</ span > < span >
60- </ span > < span style ="color:#8959a8; "> struct </ span > < span > FDcTestOptional</ span > < span >
61- </ span > < span > {</ span > < span >
62- </ span > < span > </ span > < span style ="color:#c82829; "> GENERATED_BODY</ span > < span > ()</ span > < span >
58+ < pre data-lang ="c++ " style ="background-color:#ffffff;color:#4d4d4c; " class ="language-c++ "> < code class ="language-c++ " data-lang ="c++ "> < span style ="color:#999999; "> // DataConfigTests54/Private/DcTestUE54.h
59+ </ span > < span style ="color:#c82829; "> USTRUCT</ span > < span > ()
60+ </ span > < span style ="color:#8959a8; "> struct </ span > < span > FDcTestOptional
61+ </ span > < span > {
62+ </ span > < span > </ span > < span style ="color:#c82829; "> GENERATED_BODY</ span > < span > ()
6363</ span > < span >
64- </ span > < span > </ span > < span style ="color:#4271ae; "> UPROPERTY</ span > < span > () TOptional<</ span > < span style ="color:#8959a8; "> float</ span > < span > > OptionalFloatField1;</ span > < span >
65- </ span > < span > </ span > < span style ="color:#4271ae; "> UPROPERTY</ span > < span > () TOptional<</ span > < span style ="color:#8959a8; "> float</ span > < span > > OptionalFloatField2;</ span > < span >
64+ </ span > < span > </ span > < span style ="color:#4271ae; "> UPROPERTY</ span > < span > () TOptional<</ span > < span style ="color:#8959a8; "> float</ span > < span > > OptionalFloatField1;
65+ </ span > < span > </ span > < span style ="color:#4271ae; "> UPROPERTY</ span > < span > () TOptional<</ span > < span style ="color:#8959a8; "> float</ span > < span > > OptionalFloatField2;
6666</ span > < span >
67- </ span > < span > </ span > < span style ="color:#4271ae; "> UPROPERTY</ span > < span > () TOptional<FString> OptionalStrField1;</ span > < span >
68- </ span > < span > </ span > < span style ="color:#4271ae; "> UPROPERTY</ span > < span > () TOptional<FString> OptionalStrField2;</ span > < span >
67+ </ span > < span > </ span > < span style ="color:#4271ae; "> UPROPERTY</ span > < span > () TOptional<FString> OptionalStrField1;
68+ </ span > < span > </ span > < span style ="color:#4271ae; "> UPROPERTY</ span > < span > () TOptional<FString> OptionalStrField2;
6969</ span > < span >
70- </ span > < span > </ span > < span style ="color:#4271ae; "> UPROPERTY</ span > < span > () TOptional<FDcInnerStruct54> OptionalStructField1;</ span > < span >
71- </ span > < span > </ span > < span style ="color:#4271ae; "> UPROPERTY</ span > < span > () TOptional<FDcInnerStruct54> OptionalStructField2;</ span > < span >
72- </ span > < span > };</ span > < span >
70+ </ span > < span > </ span > < span style ="color:#4271ae; "> UPROPERTY</ span > < span > () TOptional<FDcInnerStruct54> OptionalStructField1;
71+ </ span > < span > </ span > < span style ="color:#4271ae; "> UPROPERTY</ span > < span > () TOptional<FDcInnerStruct54> OptionalStructField2;
72+ </ span > < span > };
7373</ span > </ code > </ pre >
7474< p > DataConfig fully supports this now and it works perfectly with JSON format since any JSON value can be < code > null</ code > :</ p >
75- < pre data-lang ="c++ " style ="background-color:#ffffff;color:#4d4d4c; " class ="language-c++ "> < code class ="language-c++ " data-lang ="c++ "> < span style ="color:#999999; "> // DataConfigTests54/Private/DcTestUE54.cpp</ span > < span style =" color:#999999; " >
76- </ span > < span > FString Str </ span > < span style ="color:#3e999f; "> = </ span > < span style ="color:#c82829; "> TEXT</ span > < span style ="color:#4271ae; "> (</ span > < span style ="color:#8959a8; "> R</ span > < span style ="color:#718c00; "> "(</ span > < span style =" color:#718c00; " >
75+ < pre data-lang ="c++ " style ="background-color:#ffffff;color:#4d4d4c; " class ="language-c++ "> < code class ="language-c++ " data-lang ="c++ "> < span style ="color:#999999; "> // DataConfigTests54/Private/DcTestUE54.cpp
76+ </ span > < span > FString Str </ span > < span style ="color:#3e999f; "> = </ span > < span style ="color:#c82829; "> TEXT</ span > < span style ="color:#4271ae; "> (</ span > < span style ="color:#8959a8; "> R</ span > < span style ="color:#718c00; "> "(
7777</ span > < span style ="color:#718c00; ">
78- </ span > < span style ="color:#718c00; "> {</ span > < span style =" color:#718c00; " >
79- </ span > < span style ="color:#718c00; "> "OptionalFloatField1" : 17.5,</ span > < span style =" color:#718c00; " >
80- </ span > < span style ="color:#718c00; "> "OptionalFloatField2" : null,</ span > < span style =" color:#718c00; " >
78+ </ span > < span style ="color:#718c00; "> {
79+ </ span > < span style ="color:#718c00; "> "OptionalFloatField1" : 17.5,
80+ </ span > < span style ="color:#718c00; "> "OptionalFloatField2" : null,
8181</ span > < span style ="color:#718c00; ">
82- </ span > < span style ="color:#718c00; "> "OptionalStrField1" : "Alpha",</ span > < span style =" color:#718c00; " >
83- </ span > < span style ="color:#718c00; "> "OptionalStrField2" : null,</ span > < span style =" color:#718c00; " >
82+ </ span > < span style ="color:#718c00; "> "OptionalStrField1" : "Alpha",
83+ </ span > < span style ="color:#718c00; "> "OptionalStrField2" : null,
8484</ span > < span style ="color:#718c00; ">
85- </ span > < span style ="color:#718c00; "> "OptionalStructField1" : {</ span > < span style =" color:#718c00; " >
86- </ span > < span style ="color:#718c00; "> "StrField" : "Beta",</ span > < span style =" color:#718c00; " >
87- </ span > < span style ="color:#718c00; "> "IntField" : 42</ span > < span style =" color:#718c00; " >
88- </ span > < span style ="color:#718c00; "> },</ span > < span style =" color:#718c00; " >
89- </ span > < span style ="color:#718c00; "> "OptionalStructField2" : null</ span > < span style =" color:#718c00; " >
90- </ span > < span style ="color:#718c00; "> }</ span > < span style =" color:#718c00; " >
85+ </ span > < span style ="color:#718c00; "> "OptionalStructField1" : {
86+ </ span > < span style ="color:#718c00; "> "StrField" : "Beta",
87+ </ span > < span style ="color:#718c00; "> "IntField" : 42
88+ </ span > < span style ="color:#718c00; "> },
89+ </ span > < span style ="color:#718c00; "> "OptionalStructField2" : null
90+ </ span > < span style ="color:#718c00; "> }
9191</ span > < span style ="color:#718c00; ">
92- </ span > < span style ="color:#718c00; "> )"</ span > < span style ="color:#4271ae; "> )</ span > < span > ;</ span > < span >
92+ </ span > < span style ="color:#718c00; "> )"</ span > < span style ="color:#4271ae; "> )</ span > < span > ;
9393</ span > < span >
94- </ span > < span style ="color:#999999; "> // equivalent fixture</ span > < span style =" color:#999999; " >
95- </ span > < span > FDcTestOptional Expect;</ span > < span >
96- </ span > < span > Expect.</ span > < span style ="color:#c82829; "> OptionalFloatField1 </ span > < span style ="color:#3e999f; "> = </ span > < span style ="color:#f5871f; "> 17.5</ span > < span style ="color:#8959a8; "> f</ span > < span > ;</ span > < span >
97- </ span > < span > Expect.</ span > < span style ="color:#c82829; "> OptionalStrField1 </ span > < span style ="color:#3e999f; "> = </ span > < span style ="color:#c82829; "> TEXT</ span > < span style ="color:#4271ae; "> (</ span > < span style ="color:#718c00; "> "Alpha"</ span > < span style ="color:#4271ae; "> )</ span > < span > ;</ span > < span >
98- </ span > < span > Expect.</ span > < span style ="color:#c82829; "> OptionalStructField1</ span > < span > .</ span > < span style ="color:#c82829; "> Emplace</ span > < span > ();</ span > < span >
99- </ span > < span > Expect.</ span > < span style ="color:#c82829; "> OptionalStructField1</ span > < span > -></ span > < span style ="color:#c82829; "> StrField </ span > < span style ="color:#3e999f; "> = </ span > < span style ="color:#c82829; "> TEXT</ span > < span style ="color:#4271ae; "> (</ span > < span style ="color:#718c00; "> "Beta"</ span > < span style ="color:#4271ae; "> )</ span > < span > ;</ span > < span >
100- </ span > < span > Expect.</ span > < span style ="color:#c82829; "> OptionalStructField1</ span > < span > -></ span > < span style ="color:#c82829; "> IntField </ span > < span style ="color:#3e999f; "> = </ span > < span style ="color:#f5871f; "> 42</ span > < span > ;</ span > < span >
94+ </ span > < span style ="color:#999999; "> // equivalent fixture
95+ </ span > < span > FDcTestOptional Expect;
96+ </ span > < span > Expect.</ span > < span style ="color:#c82829; "> OptionalFloatField1 </ span > < span style ="color:#3e999f; "> = </ span > < span style ="color:#f5871f; "> 17.5</ span > < span style ="color:#8959a8; "> f</ span > < span > ;
97+ </ span > < span > Expect.</ span > < span style ="color:#c82829; "> OptionalStrField1 </ span > < span style ="color:#3e999f; "> = </ span > < span style ="color:#c82829; "> TEXT</ span > < span style ="color:#4271ae; "> (</ span > < span style ="color:#718c00; "> "Alpha"</ span > < span style ="color:#4271ae; "> )</ span > < span > ;
98+ </ span > < span > Expect.</ span > < span style ="color:#c82829; "> OptionalStructField1</ span > < span > .</ span > < span style ="color:#c82829; "> Emplace</ span > < span > ();
99+ </ span > < span > Expect.</ span > < span style ="color:#c82829; "> OptionalStructField1</ span > < span > -></ span > < span style ="color:#c82829; "> StrField </ span > < span style ="color:#3e999f; "> = </ span > < span style ="color:#c82829; "> TEXT</ span > < span style ="color:#4271ae; "> (</ span > < span style ="color:#718c00; "> "Beta"</ span > < span style ="color:#4271ae; "> )</ span > < span > ;
100+ </ span > < span > Expect.</ span > < span style ="color:#c82829; "> OptionalStructField1</ span > < span > -></ span > < span style ="color:#c82829; "> IntField </ span > < span style ="color:#3e999f; "> = </ span > < span style ="color:#f5871f; "> 42</ span > < span > ;
101101</ span > </ code > </ pre >
102102< ul >
103103< li > < a href ="https://slowburn.dev/dataconfig/Advanced/Optional "> Advanced - Optional</ a > </ li >
@@ -106,11 +106,11 @@ <h2 id="core-types-serializers">Core Types Serializers<a class="zola-anchor" hre
106106< svg class ="octicon " viewBox ="0 0 16 16 " version ="1.1 " width ="16 " height ="16 " aria-hidden ="true "> < path fill-rule ="evenodd " d ="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z "> </ path > </ svg >
107107</ a > </ h2 >
108108< p > DataConfig now comes bundled with a set of serialization handlers that read/writes core types like < code > FVector</ code > into a more compact format:</ p >
109- < pre data-lang ="JSON " style ="background-color:#ffffff;color:#4d4d4c; " class ="language-JSON "> < code class ="language-JSON " data-lang ="JSON "> < span > {</ span > < span >
110- </ span > < span > </ span > < span style ="color:#718c00; "> "VecField1" </ span > < span > : [ </ span > < span style ="color:#f5871f; "> 0</ span > < span > , </ span > < span style ="color:#f5871f; "> 0</ span > < span > , </ span > < span style ="color:#f5871f; "> 1</ span > < span > ],</ span > < span >
111- </ span > < span > </ span > < span style ="color:#718c00; "> "ColorField1" </ span > < span > : </ span > < span style ="color:#718c00; "> "#000000FF"</ span > < span > ,</ span > < span >
112- </ span > < span > </ span > < span style ="color:#718c00; "> "DateTimeField1" </ span > < span > : </ span > < span style ="color:#718c00; "> "0001.01.01-00.00.00"</ span > < span > ,</ span > < span >
113- </ span > < span > }</ span > < span >
109+ < pre data-lang ="JSON " style ="background-color:#ffffff;color:#4d4d4c; " class ="language-JSON "> < code class ="language-JSON " data-lang ="JSON "> < span > {
110+ </ span > < span > </ span > < span style ="color:#718c00; "> "VecField1" </ span > < span > : [ </ span > < span style ="color:#f5871f; "> 0</ span > < span > , </ span > < span style ="color:#f5871f; "> 0</ span > < span > , </ span > < span style ="color:#f5871f; "> 1</ span > < span > ],
111+ </ span > < span > </ span > < span style ="color:#718c00; "> "ColorField1" </ span > < span > : </ span > < span style ="color:#718c00; "> "#000000FF"</ span > < span > ,
112+ </ span > < span > </ span > < span style ="color:#718c00; "> "DateTimeField1" </ span > < span > : </ span > < span style ="color:#718c00; "> "0001.01.01-00.00.00"</ span > < span > ,
113+ </ span > < span > }
114114</ span > </ code > </ pre >
115115< p > This works both ways in serialization and deserializations.</ p >
116116< ul >
0 commit comments