@@ -56,89 +56,89 @@ json SerializeType(CSchemaType* type)
5656
5757 switch (type->m_eTypeCategory )
5858 {
59- case SCHEMA_TYPE_BUILTIN:
60- j[" category" ] = " builtin" ;
61- j[" name" ] = type->m_sTypeName .String ();
62- break ;
63- case SCHEMA_TYPE_POINTER:
64- j[" category" ] = " ptr" ;
65- j[" inner" ] = SerializeType (static_cast <CSchemaType_Ptr*>(type)->m_pObjectType );
66- break ;
67- case SCHEMA_TYPE_FIXED_ARRAY:
68- {
69- auto * arr = static_cast <CSchemaType_FixedArray*>(type);
70- j[" category" ] = " fixed_array" ;
71- j[" count" ] = arr->m_nElementCount ;
72- j[" inner" ] = SerializeType (arr->m_pElementType );
73- break ;
74- }
75- case SCHEMA_TYPE_ATOMIC:
76- {
77- j[" category" ] = " atomic" ;
78-
79- // Extract outer name from m_sTypeName before '<'
80- std::string typeName = type->m_sTypeName .String ();
81- auto pos = typeName.find (' <' );
82- if (pos != std::string::npos)
83- {
84- auto name = typeName.substr (0 , pos);
85- // Trim trailing whitespace
86- while (!name.empty () && name.back () == ' ' )
87- name.pop_back ();
88- j[" name" ] = name;
89- }
90- else
91- {
92- j[" name" ] = typeName;
93- }
94-
95- if (type->m_eAtomicCategory == SCHEMA_ATOMIC_T ||
96- type->m_eAtomicCategory == SCHEMA_ATOMIC_COLLECTION_OF_T)
59+ case SCHEMA_TYPE_BUILTIN:
60+ j[" category" ] = " builtin" ;
61+ j[" name" ] = type->m_sTypeName .String ();
62+ break ;
63+ case SCHEMA_TYPE_POINTER:
64+ j[" category" ] = " ptr" ;
65+ j[" inner" ] = SerializeType (static_cast <CSchemaType_Ptr*>(type)->m_pObjectType );
66+ break ;
67+ case SCHEMA_TYPE_FIXED_ARRAY:
9768 {
98- j[" inner" ] = SerializeType (static_cast <CSchemaType_Atomic_T*>(type)->m_pTemplateType );
69+ auto * arr = static_cast <CSchemaType_FixedArray*>(type);
70+ j[" category" ] = " fixed_array" ;
71+ j[" count" ] = arr->m_nElementCount ;
72+ j[" inner" ] = SerializeType (arr->m_pElementType );
73+ break ;
9974 }
100- else if (type-> m_eAtomicCategory == SCHEMA_ATOMIC_TT)
75+ case SCHEMA_TYPE_ATOMIC:
10176 {
102- auto * tt = static_cast <CSchemaType_Atomic_TT*>(type);
103- j[" inner" ] = SerializeType (tt->m_pTemplateType );
104- j[" inner2" ] = SerializeType (tt->m_pTemplateType2 );
77+ j[" category" ] = " atomic" ;
78+
79+ // Extract outer name from m_sTypeName before '<'
80+ std::string typeName = type->m_sTypeName .String ();
81+ auto pos = typeName.find (' <' );
82+ if (pos != std::string::npos)
83+ {
84+ auto name = typeName.substr (0 , pos);
85+ // Trim trailing whitespace
86+ while (!name.empty () && name.back () == ' ' )
87+ name.pop_back ();
88+ j[" name" ] = name;
89+ }
90+ else
91+ {
92+ j[" name" ] = typeName;
93+ }
94+
95+ if (type->m_eAtomicCategory == SCHEMA_ATOMIC_T ||
96+ type->m_eAtomicCategory == SCHEMA_ATOMIC_COLLECTION_OF_T)
97+ {
98+ j[" inner" ] = SerializeType (static_cast <CSchemaType_Atomic_T*>(type)->m_pTemplateType );
99+ }
100+ else if (type->m_eAtomicCategory == SCHEMA_ATOMIC_TT)
101+ {
102+ auto * tt = static_cast <CSchemaType_Atomic_TT*>(type);
103+ j[" inner" ] = SerializeType (tt->m_pTemplateType );
104+ j[" inner2" ] = SerializeType (tt->m_pTemplateType2 );
105+ }
106+ break ;
105107 }
106- break ;
107- }
108- case SCHEMA_TYPE_DECLARED_CLASS:
109- {
110- j[" category" ] = " declared_class" ;
111- auto * classType = static_cast <CSchemaType_DeclaredClass*>(type);
112- if (classType->m_pClassInfo && classType->m_pClassInfo ->m_pszName )
108+ case SCHEMA_TYPE_DECLARED_CLASS:
113109 {
114- j[" name" ] = classType->m_pClassInfo ->m_pszName ;
115- j[" module" ] = classType->m_pClassInfo ->m_pszProjectName ;
110+ j[" category" ] = " declared_class" ;
111+ auto * classType = static_cast <CSchemaType_DeclaredClass*>(type);
112+ if (classType->m_pClassInfo && classType->m_pClassInfo ->m_pszName )
113+ {
114+ j[" name" ] = classType->m_pClassInfo ->m_pszName ;
115+ j[" module" ] = classType->m_pClassInfo ->m_pszProjectName ;
116+ }
117+ else
118+ j[" name" ] = type->m_sTypeName .String ();
119+ break ;
116120 }
117- else
118- j[" name" ] = type->m_sTypeName .String ();
119- break ;
120- }
121- case SCHEMA_TYPE_DECLARED_ENUM:
122- {
123- j[" category" ] = " declared_enum" ;
124- auto * enumType = static_cast <CSchemaType_DeclaredEnum*>(type);
125- if (enumType->m_pEnumInfo && enumType->m_pEnumInfo ->m_pszName )
121+ case SCHEMA_TYPE_DECLARED_ENUM:
126122 {
127- j[" name" ] = enumType->m_pEnumInfo ->m_pszName ;
128- j[" module" ] = enumType->m_pEnumInfo ->m_pszProjectName ;
123+ j[" category" ] = " declared_enum" ;
124+ auto * enumType = static_cast <CSchemaType_DeclaredEnum*>(type);
125+ if (enumType->m_pEnumInfo && enumType->m_pEnumInfo ->m_pszName )
126+ {
127+ j[" name" ] = enumType->m_pEnumInfo ->m_pszName ;
128+ j[" module" ] = enumType->m_pEnumInfo ->m_pszProjectName ;
129+ }
130+ else
131+ j[" name" ] = type->m_sTypeName .String ();
132+ break ;
129133 }
130- else
134+ case SCHEMA_TYPE_BITFIELD:
135+ j[" category" ] = " bitfield" ;
136+ j[" count" ] = static_cast <CSchemaType_Bitfield*>(type)->m_nBitfieldCount ;
137+ break ;
138+ default :
139+ j[" category" ] = " builtin" ;
131140 j[" name" ] = type->m_sTypeName .String ();
132- break ;
133- }
134- case SCHEMA_TYPE_BITFIELD:
135- j[" category" ] = " bitfield" ;
136- j[" count" ] = static_cast <CSchemaType_Bitfield*>(type)->m_nBitfieldCount ;
137- break ;
138- default :
139- j[" category" ] = " builtin" ;
140- j[" name" ] = type->m_sTypeName .String ();
141- break ;
141+ break ;
142142 }
143143
144144 return j;
@@ -167,7 +167,7 @@ void DumpClasses(const std::vector<IntermediateSchemaClass>& classes, json& clas
167167 parents.push_back (std::move (parentObj));
168168 }
169169
170- if (parents.size ())
170+ if (parents.size ())
171171 classObj[" parents" ] = std::move (parents);
172172
173173 json fields = json::array ();
@@ -180,7 +180,7 @@ void DumpClasses(const std::vector<IntermediateSchemaClass>& classes, json& clas
180180 fieldObj[" type" ] = SerializeType (field.type );
181181
182182 auto fieldMetadataArr = SerializeMetadataArray (field.metadata );
183- if (fieldMetadataArr.size ())
183+ if (fieldMetadataArr.size ())
184184 fieldObj[" metadata" ] = std::move (fieldMetadataArr);
185185
186186 fields.push_back (fieldObj);
@@ -192,7 +192,7 @@ void DumpClasses(const std::vector<IntermediateSchemaClass>& classes, json& clas
192192 classesArray.push_back (std::move (classObj));
193193 }
194194}
195-
195+
196196void DumpEnums (const std::vector<IntermediateSchemaEnum>& enums, json& enumsArray)
197197{
198198 for (const auto & intermediateEnum : enums)
@@ -220,7 +220,7 @@ void DumpEnums(const std::vector<IntermediateSchemaEnum>& enums, json& enumsArra
220220 members.push_back (std::move (memberObj));
221221 }
222222
223- if (members.size ())
223+ if (members.size ())
224224 enumObj[" members" ] = std::move (members);
225225
226226 enumsArray.push_back (std::move (enumObj));
@@ -238,6 +238,15 @@ void Dump(const std::vector<IntermediateSchemaEnum>& enums, const std::vector<In
238238 DumpClasses (classes, classesArray);
239239 DumpEnums (enums, enumsArray);
240240
241+ if (!Globals::sourceRevision.empty ())
242+ root[" revision" ] = std::stoi (Globals::sourceRevision);
243+
244+ if (!Globals::versionDate.empty ())
245+ root[" version_date" ] = Globals::versionDate;
246+
247+ if (!Globals::versionTime.empty ())
248+ root[" version_time" ] = Globals::versionTime;
249+
241250 root[" classes" ] = classesArray;
242251 root[" enums" ] = enumsArray;
243252
0 commit comments