Documentation for OpenFLUID 2.2.2
Loading...
Searching...
No Matches
WareRegistrySerializer.hpp
Go to the documentation of this file.
1/*
2
3 This file is part of OpenFLUID software
4 Copyright(c) 2021-2026, INRAE
5
6
7 == GNU General Public License Usage ==
8
9 OpenFLUID is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version.
13
14 OpenFLUID is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with OpenFLUID. If not, see <http://www.gnu.org/licenses/>.
21
22
23 == Other Usage ==
24
25 Other Usage means a use of OpenFLUID that is inconsistent with the GPL
26 license, and requires a written agreement between You and INRA.
27 Licensees for Other Usage of OpenFLUID may use this file in accordance
28 with the terms contained in the written agreement between You and INRA.
29
30*/
31
32
33/**
34 @file WareRegistrySerializer.hpp
35
36 @author Jean-Christophe FABRE <jean-christophe.fabre@inrae.fr>
37 */
38
39
40#ifndef __OPENFLUID_MACHINE_WAREREGISTRYSERIALIZER_HPP__
41#define __OPENFLUID_MACHINE_WAREREGISTRYSERIALIZER_HPP__
42
43
44#include <sstream>
45
50#include <openfluid/config.hpp>
51
52
53namespace openfluid { namespace machine {
54
55
56/**
57 Class for serialization fo wares registries
58 @tparam SignatureType class defining the container for ware signature only
59*/
60template<class SignatureType>
62{
63 private:
64
65 const WareRegistry<SignatureType>* m_Registry;
66
67
68 static std::string getAuthorsAsString(const openfluid::ware::WareSignature::PeopleList_t& Authors)
69 {
70 std::string Str = "";
71 bool First = true;
72
73 for (auto Auth: Authors)
74 {
75 if (!First)
76 {
77 Str+= ", ";
78 }
79 First = false;
80
81 Str += openfluid::tools::replaceEmptyString(Auth.first,("(unknown author)"));
82 Str += " <";
83 Str += openfluid::tools::replaceEmptyString(Auth.second,("(unknown author email)"));
84 Str += ">";
85 }
86
87 return Str;
88 }
89
90 static std::string getIndentedText(const unsigned int Level,
91 const std::string& Title, const std::string& Content = "")
92 {
93 std::string Text;
94
95 if (Level == 1)
96 {
97 Text += "* ";
98 }
99 else if (Level == 2)
100 {
101 Text += " - ";
102 }
103 else if (Level == 3)
104 {
105 Text += " . ";
106 }
107
108 Text += Title;
109
110 if (!Content.empty())
111 {
112 Text += ": "+Content;
113 }
114
115 return Text;
116 }
117
118 void writeListToStreamAsText(std::ostream& OutStm,bool WithErrors) const;
119
120 void addWareMetaForText(const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const;
121
122 void addWareMetaForText(const openfluid::ware::ObserverSignature* Sign, std::ostream& OutStm) const;
123
124 void addSchedulingDetailsForText(const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const;
125
126 void addDataForText(const openfluid::ware::SignatureDataItem& Item, const std::string& CatStr,
127 std::ostream& OutStm) const;
128
129 void addSpatialDataForText(const openfluid::ware::SignatureSpatialDataItem& Item, const std::string& CatStr,
130 std::ostream& OutStm) const;
131
132 void addTypedSpatialDataForText(const openfluid::ware::SignatureSpatialDataItem& Item,
133 const std::string& CatStr, std::ostream& OutStm) const;
134
135 void addDataDetailsForText(const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const;
136
137 void addGraphDetailsForText(const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const;
138
139 void addWareDynaForText(const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const;
140
141 void addWareDynaForText(const openfluid::ware::ObserverSignature* Sign, std::ostream& OutStm) const;
142
143 void writeToStreamAsText(std::ostream& OutStm,bool WithErrors) const;
144
145 void addErrorsToJSONDoc(openfluid::thirdparty::json& Doc) const;
146
147 static std::string getJSONAsString(openfluid::thirdparty::json& Doc);
148
149 void writeListToStreamAsJSON(std::ostream& OutStm,bool WithErrors) const;
150
151 openfluid::thirdparty::json initWareObjectForJSON(const openfluid::ware::SimulatorSignature* Sign) const;
152
153 openfluid::thirdparty::json initWareObjectForJSON(const openfluid::ware::ObserverSignature* Sign) const;
154
155 void writeToStreamAsJSON(std::ostream& OutStm,bool WithErrors) const;
156
157
158 public:
159
161 m_Registry(Registry)
162 {
163
164 }
165
166 void writeToStream(std::ostream& OutStm,const std::string& Format,bool Detailed, bool WithErrors) const;
167
168};
169
170
171// =====================================================================
172// =====================================================================
173
174
175template<class SignatureType>
176void WareRegistrySerializer<SignatureType>::writeListToStreamAsText(std::ostream& OutStm,
177 bool WithErrors) const
178{
179 for (auto& C : m_Registry->availableWares())
180 {
181 if (C.second.isValid() && C.second.hasSignature())
182 {
183 OutStm << C.second.signature()->ID << "\n";
184 }
185 }
186
187 if (WithErrors && ! m_Registry->erroredWares().empty())
188 {
189 for (auto& C : m_Registry->erroredWares())
190 {
191 OutStm << "Error on file " << C.first << ": " << C.second.getMessage() << "\n";
192 }
193 }
194}
195
196
197// =====================================================================
198// =====================================================================
199
200
201template<class SignatureType>
202void WareRegistrySerializer<SignatureType>::addWareMetaForText(
203 const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const
204{
205 std::vector<std::string> DomainTags = Sign->getTagsByType("domain");
206 std::vector<std::string> ProcessTags = Sign->getTagsByType("process");
207 std::vector<std::string> MethodTags = Sign->getTagsByType("method");
208
209 OutStm << getIndentedText(2,"Domain",openfluid::tools::replaceEmptyString(openfluid::tools::join(DomainTags,
210 openfluid::config::CHAR_TAG_SEPARATOR),
211 "(unknown)")) << "\n";
212 OutStm << getIndentedText(2,"Process",openfluid::tools::replaceEmptyString(openfluid::tools::join(ProcessTags,
213 openfluid::config::CHAR_TAG_SEPARATOR),
214 "(unknown)")) << "\n";
215 OutStm << getIndentedText(2,"Method",openfluid::tools::replaceEmptyString(openfluid::tools::join(MethodTags,
216 openfluid::config::CHAR_TAG_SEPARATOR),
217 "(unknown)")) << "\n";
218}
219
220
221// =====================================================================
222// =====================================================================
223
224
225template<class SignatureType>
226void WareRegistrySerializer<SignatureType>::addWareMetaForText(
227 const openfluid::ware::ObserverSignature* /*Sign*/, std::ostream& /*OutStm*/) const
228{
229 // nothing to be done
230}
231
232
233// =====================================================================
234// =====================================================================
235
236
237template<class SignatureType>
238void WareRegistrySerializer<SignatureType>::addSchedulingDetailsForText(
239 const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const
240{
241 std::ostringstream oss;
242
244 {
245 oss << "fixed to default deltaT";
246 }
248 {
249 oss << "fixed to " << Sign->TimeScheduling.Min << " seconds";
250 }
252 {
253 oss << "range between " << Sign->TimeScheduling.Min << " and " << Sign->TimeScheduling.Max << " seconds";
254 }
255 else
256 {
257 oss << "undefined";
258 }
259
260 OutStm << getIndentedText(2,"Time scheduling",oss.str()) << "\n";
261}
262
263
264// =====================================================================
265// =====================================================================
266
267
268template<class SignatureType>
269void WareRegistrySerializer<SignatureType>::addDataForText(
270 const openfluid::ware::SignatureDataItem& Item, const std::string& CatStr, std::ostream& OutStm) const
271{
272 std::ostringstream oss;
273
274 std::string UnitStr;
275 if (!Item.SIUnit.empty())
276 {
277 UnitStr = " ("+Item.SIUnit+")";
278 }
279
280 oss << CatStr << ". " << Item.Description << UnitStr;
281 OutStm << getIndentedText(3,Item.Name,oss.str()) << "\n";
282}
283
284
285// =====================================================================
286// =====================================================================
287
288
289template<class SignatureType>
290void WareRegistrySerializer<SignatureType>::addSpatialDataForText(
291 const openfluid::ware::SignatureSpatialDataItem& Item, const std::string& CatStr, std::ostream& OutStm) const
292{
293 std::ostringstream oss;
294
295 std::string UnitStr;
296 if (!Item.SIUnit.empty())
297 {
298 UnitStr = " ("+Item.SIUnit+")";
299 }
300
301 oss << CatStr << ". " << Item.Description << UnitStr;
302 OutStm << getIndentedText(3,Item.Name+" {"+Item.UnitsClass+"}",oss.str()) << "\n";
303}
304
305
306// =====================================================================
307// =====================================================================
308
309
310template<class SignatureType>
311void WareRegistrySerializer<SignatureType>::addTypedSpatialDataForText(
312 const openfluid::ware::SignatureSpatialDataItem& Item, const std::string& CatStr, std::ostream& OutStm) const
313{
314 std::ostringstream oss;
315
316 std::string UnitStr;
317 if (!Item.SIUnit.empty())
318 {
319 UnitStr = " ("+Item.SIUnit+")";
320 }
321
322 std::string TypeStr;
324 {
326 }
327
328 oss << CatStr << ". " << Item.Description << UnitStr;
329 OutStm << getIndentedText(3,Item.Name+" {"+Item.UnitsClass+"}"+TypeStr,oss.str()) << "\n";
330}
331
332
333// =====================================================================
334// =====================================================================
335
336
337template<class SignatureType>
338void WareRegistrySerializer<SignatureType>::addDataDetailsForText(
339 const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const
340{
341 const auto& Data = Sign->HandledData;
342 const auto& SimData = Sign->SimulatorHandledData;
343
344 if (!Data.UsedParams.empty() || !Data.RequiredParams.empty() ||
345 !SimData.ProducedVars.empty() || !SimData.UpdatedVars.empty() ||
346 !Data.RequiredVars.empty() || !Data.UsedVars.empty() ||
347 !SimData.ProducedAttributes.empty() || !Data.RequiredAttributes.empty() || !Data.UsedAttributes.empty() ||
348 !Data.RequiredExtraFiles.empty() || !Data.UsedExtraFiles.empty() ||
349 !SimData.UsedEventsOnUnits.empty())
350 {
351 OutStm << getIndentedText(2,"Handled data") << "\n";
352
353
354 // ------ Parameters
355
356 for (const auto& Item : Data.RequiredParams)
357 {
358 addDataForText(Item,"required parameter",OutStm);
359 }
360
361 for (const auto& Item : Data.UsedParams)
362 {
363 addDataForText(Item,"used parameter",OutStm);
364 }
365
366
367 // ------ Attributes
368
369 for (const auto& Item : Data.RequiredAttributes)
370 {
371 addSpatialDataForText(Item,"required attribute",OutStm);
372 }
373
374 for (const auto& Item : Data.UsedAttributes)
375 {
376 addSpatialDataForText(Item,"used attribute",OutStm);
377 }
378
379 for (const auto& Item : SimData.ProducedAttributes)
380 {
381 addSpatialDataForText(Item,"produced attribute",OutStm);
382 }
383
384
385 // ------ Variables
386
387 for (const auto& Item : Data.RequiredVars)
388 {
389 addTypedSpatialDataForText(Item,"required variable",OutStm);
390 }
391
392 for (const auto& Item : Data.UsedVars)
393 {
394 addTypedSpatialDataForText(Item,"used variable",OutStm);
395 }
396
397 for (const auto& Item : SimData.UpdatedVars)
398 {
399 addTypedSpatialDataForText(Item,"updated variable",OutStm);
400 }
401
402 for (const auto& Item : SimData.ProducedVars)
403 {
404 addTypedSpatialDataForText(Item,"produced variable",OutStm);
405 }
406
407
408 // ------ Events
409 if (!SimData.UsedEventsOnUnits.empty())
410 {
411 bool First = true;
412 std::string EventsStr;
413
414 for (const auto& Item : SimData.UsedEventsOnUnits)
415 {
416 if (!First)
417 {
418 EventsStr += ", ";
419 }
420 First = false;
421 EventsStr += Item;
422 }
423 OutStm << getIndentedText(3,"Events handled on",EventsStr) << "\n";
424 }
425
426
427 // ------ Extrafiles
428
429 for (const auto& Item : Data.RequiredExtraFiles)
430 {
431 OutStm << getIndentedText(3,"Required extra file",Item) << "\n";
432 }
433
434 for (const auto& Item : Data.UsedExtraFiles)
435 {
436 OutStm << getIndentedText(3,"Used extra file",Item) << "\n";
437 }
438
439 }
440}
441
442
443// =====================================================================
444// =====================================================================
445
446
447template<class SignatureType>
448void WareRegistrySerializer<SignatureType>::addGraphDetailsForText(
449 const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const
450{
452 {
453 OutStm << getIndentedText(2,"Handled units graph") << "\n";
454
455
456 if (!Sign->HandledUnitsGraph.UpdatedUnitsGraph.empty())
457 {
458 OutStm << getIndentedText(3,"Global units graph updates",Sign->HandledUnitsGraph.UpdatedUnitsGraph) << "\n";
459 }
460
461 for (auto& UC : Sign->HandledUnitsGraph.UpdatedUnitsClasses)
462 {
463 OutStm << getIndentedText(3,"Units graph update on class "+UC.UnitsClass,UC.Description) << "\n";
464 }
465 }
466}
467
468
469// =====================================================================
470// =====================================================================
471
472
473template<class SignatureType>
474void WareRegistrySerializer<SignatureType>::addWareDynaForText(
475 const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const
476{
477 addSchedulingDetailsForText(Sign,OutStm);
478 addDataDetailsForText(Sign,OutStm);
479 addGraphDetailsForText(Sign,OutStm);
480}
481
482
483// =====================================================================
484// =====================================================================
485
486
487template<class SignatureType>
488void WareRegistrySerializer<SignatureType>::addWareDynaForText(
489 const openfluid::ware::ObserverSignature* /*Sign*/, std::ostream& /*OutStm*/) const
490{
491 // nothing to be done
492}
493
494
495// =====================================================================
496// =====================================================================
497
498
499template<class SignatureType>
500void WareRegistrySerializer<SignatureType>::writeToStreamAsText(std::ostream& OutStm,bool WithErrors) const
501{
502 bool First = true;
503
504 for (auto& C : m_Registry->availableWares())
505 {
506 if (C.second.isValid() && C.second.hasSignature())
507 {
508 if (!First)
509 {
510 OutStm << "================================================================================\n";
511 }
512 First = false;
513
514 const auto Sign = C.second.signature().get();
515
516 OutStm << getIndentedText(1,Sign->ID) << "\n";
517 OutStm << getIndentedText(2,"Name",openfluid::tools::replaceEmptyString(Sign->Name,"(none)")) << "\n";
518 OutStm << getIndentedText(2,"File",C.second.getPath()) << "\n";
519 addWareMetaForText(Sign,OutStm);
520 OutStm <<
521 getIndentedText(2,"Description",openfluid::tools::replaceEmptyString(Sign->Description,"(none)")) << "\n";
522 OutStm << getIndentedText(2,"Version",Sign->Version) << "\n";
523 OutStm << getIndentedText(2,"SDK version used at build time",Sign->BuildInfo.SDKVersion) << "\n";
524 OutStm << getIndentedText(2,"Build information") << "\n";
525 OutStm <<
526 getIndentedText(3,"Build type",openfluid::tools::replaceEmptyString(Sign->BuildInfo.BuildType,"(unknown)")) <<
527 "\n";
528 OutStm <<
529 getIndentedText(3,"Compiler ID",openfluid::tools::replaceEmptyString(Sign->BuildInfo.CompilerID,"(unknown)")) <<
530 "\n";
531 OutStm <<
532 getIndentedText(3,"Compiler version",
534 "\n";
535 OutStm <<
536 getIndentedText(3,"Compilation flags",
538 "\n";
539 OutStm <<
540 getIndentedText(2,"Development status",Sign->getStatusAsString()) << "\n";
541 OutStm << getIndentedText(2,"Author(s)",getAuthorsAsString(Sign->Authors)) << "\n";
542 addWareDynaForText(Sign,OutStm);
543 }
544 }
545
546 if (WithErrors && !m_Registry->erroredWares().empty())
547 {
548 if (!First)
549 {
550 OutStm << "================================================================================\n";
551 }
552 First = false;
553
554 for (auto& EFile : m_Registry->erroredWares())
555 {
556
557 OutStm << "Error on file " << EFile.first << ": " << EFile.second.getMessage() << "\n";
558 }
559 }
560}
561
562
563// =====================================================================
564// =====================================================================
565
566
567template<class SignatureType>
568void WareRegistrySerializer<SignatureType>::
569 addErrorsToJSONDoc(openfluid::thirdparty::json& Doc) const
570{
571 openfluid::thirdparty::json Errors(openfluid::thirdparty::json::value_t::array);
572
573 for (auto& EFile : m_Registry->erroredWares())
574 {
575 openfluid::thirdparty::json EObj(openfluid::thirdparty::json::value_t::object);
576 EObj["file_path"] = EFile.first;
577 EObj["message"] = EFile.second.getMessage();
578 Errors.push_back(EObj);
579 }
580
581 Doc["errors"] = Errors;
582}
583
584
585// =====================================================================
586// =====================================================================
587
588
589template<class SignatureType>
590std::string WareRegistrySerializer<SignatureType>::getJSONAsString(openfluid::thirdparty::json& Doc)
591{
592 return Doc.dump(2);
593}
594
595
596// =====================================================================
597// =====================================================================
598
599
600template<class SignatureType>
601void WareRegistrySerializer<SignatureType>::writeListToStreamAsJSON(std::ostream& OutStm, bool WithErrors) const
602{
603 openfluid::thirdparty::json JSON(openfluid::thirdparty::json::value_t::object);
604
605 openfluid::thirdparty::json Available(openfluid::thirdparty::json::value_t::array);
606
607 for (auto& C : m_Registry->availableWares())
608 {
609 if (C.second.isValid() && C.second.hasSignature())
610 {
611 Available.push_back(C.second.signature()->ID);
612 }
613 }
614
615 JSON["available"] = Available;
616
617 if (WithErrors)
618 {
619 addErrorsToJSONDoc(JSON);
620 }
621
622
623 OutStm << getJSONAsString(JSON) << "\n";
624}
625
626
627// =====================================================================
628// =====================================================================
629
630
631template<class SignatureType>
632openfluid::thirdparty::json WareRegistrySerializer<SignatureType>::initWareObjectForJSON(
633 const openfluid::ware::SimulatorSignature* Sign) const
634{
636}
637
638
639// =====================================================================
640// =====================================================================
641
642
643template<class SignatureType>
644openfluid::thirdparty::json WareRegistrySerializer<SignatureType>::initWareObjectForJSON(
645 const openfluid::ware::ObserverSignature* Sign) const
646{
648}
649
650
651// =====================================================================
652// =====================================================================
653
654
655template<class SignatureType>
656void WareRegistrySerializer<SignatureType>::writeToStreamAsJSON(std::ostream& OutStm,
657 bool WithErrors) const
658{
659 openfluid::thirdparty::json JSON(openfluid::thirdparty::json::value_t::object);
660
661 openfluid::thirdparty::json Available(openfluid::thirdparty::json::value_t::array);
662
663 for (auto& C : m_Registry->availableWares())
664 {
665 if (C.second.isValid() && C.second.hasSignature())
666 {
667 const auto Sign = C.second.signature().get();
668
669 openfluid::thirdparty::json WareObj = initWareObjectForJSON(Sign);
670 WareObj["file_path"] = C.second.getPath();
671 WareObj["sdk_version"] = Sign->BuildInfo.SDKVersion;
672
673 openfluid::thirdparty::json BuildObj(openfluid::thirdparty::json::value_t::object);
674 BuildObj["type"] = Sign->BuildInfo.BuildType;
675 BuildObj["compiler_id"] = Sign->BuildInfo.CompilerID;
676 BuildObj["compiler_version"] = Sign->BuildInfo.CompilerVersion;
677 BuildObj["compilation_flags"] = Sign->BuildInfo.CompilationFlags;
678 WareObj["build_info"] = BuildObj;
679
680 Available.push_back(WareObj);
681 }
682 }
683
684 JSON["available"] = Available;
685
686
687 if (WithErrors)
688 {
689 addErrorsToJSONDoc(JSON);
690 }
691
692
693 OutStm << getJSONAsString(JSON) << "\n";
694}
695
696
697// =====================================================================
698// =====================================================================
699
700
701template<class SignatureType>
703 const std::string& Format,
704 bool Detailed, bool WithErrors) const
705{
706 if (Format == "text")
707 {
708 if (Detailed)
709 {
710 writeToStreamAsText(OutStm,WithErrors);
711 }
712 else
713 {
714 writeListToStreamAsText(OutStm,WithErrors);
715 }
716 }
717 else if (Format == "json")
718 {
719 if (Detailed)
720 {
721 writeToStreamAsJSON(OutStm,WithErrors);
722 }
723 else
724 {
725 writeListToStreamAsJSON(OutStm,WithErrors);
726 }
727 }
728 else
729 {
730 throw openfluid::base::FrameworkException(OPENFLUID_CODE_LOCATION,
731 "Wrong format for available wares reporting");
732 }
733}
734
735
736} } // namespaces
737
738
739#endif /* __OPENFLUID_MACHINE_WAREREGISTRYSERIALIZER_HPP__ */
Definition FrameworkException.hpp:51
@ NONE
Definition Value.hpp:66
static std::string getStringFromValueType(const Value::Type ValueType)
Definition WareRegistrySerializer.hpp:62
WareRegistrySerializer(const WareRegistry< SignatureType > *Registry)
Definition WareRegistrySerializer.hpp:160
void writeToStream(std::ostream &OutStm, const std::string &Format, bool Detailed, bool WithErrors) const
Definition WareRegistrySerializer.hpp:702
Definition WareRegistry.hpp:51
SignatureHandledData HandledData
Definition WareSignature.hpp:343
Definition ObserverSignature.hpp:54
Definition WareSignature.hpp:235
openfluid::core::Value::Type DataType
Definition WareSignature.hpp:241
std::string SIUnit
Definition WareSignature.hpp:240
std::string Name
Definition WareSignature.hpp:238
std::string Description
Definition WareSignature.hpp:239
Definition WareSignature.hpp:263
openfluid::core::UnitsClass_t UnitsClass
Definition WareSignature.hpp:266
openfluid::core::Duration_t Min
Definition SimulatorSignature.hpp:178
openfluid::core::Duration_t Max
Definition SimulatorSignature.hpp:180
SchedulingType Type
Definition SimulatorSignature.hpp:176
std::string UpdatedUnitsGraph
Definition SimulatorSignature.hpp:147
std::vector< SignatureUnitsClassItem > UpdatedUnitsClasses
Definition SimulatorSignature.hpp:149
Definition SimulatorSignature.hpp:262
SignatureTimeScheduling TimeScheduling
Definition SimulatorSignature.hpp:281
SimulatorSignatureHandledData SimulatorHandledData
Definition SimulatorSignature.hpp:266
SignatureUnitsGraph HandledUnitsGraph
Definition SimulatorSignature.hpp:276
WareID_t ID
Definition WareSignature.hpp:79
PeopleList_t Authors
Definition WareSignature.hpp:98
std::string Description
Definition WareSignature.hpp:83
std::vector< std::string > getTagsByType(const std::string &Type) const
Definition WareSignature.hpp:150
std::string getStatusAsString() const
Definition WareSignature.hpp:191
SignatureBuildInfo BuildInfo
Definition WareSignature.hpp:77
WareName_t Name
Definition WareSignature.hpp:81
std::vector< Person_t > PeopleList_t
Definition WareSignature.hpp:67
WareVersion_t Version
Definition WareSignature.hpp:88
Definition ObserverSignatureSerializer.hpp:55
openfluid::thirdparty::json toJSON(const openfluid::ware::ObserverSignature &Sign) const
Definition SimulatorSignatureSerializer.hpp:56
openfluid::thirdparty::json toJSON(const openfluid::ware::SimulatorSignature &Sign) const
#define OPENFLUID_API
Definition dllexport.hpp:86
nlohmann::ordered_json json
Definition JSON.hpp:52
std::string OPENFLUID_API replaceEmptyString(std::string SourceStr, const std::string &ReplaceStr)
std::string OPENFLUID_API join(const std::vector< std::string > &Vect, const std::string &Sep)
Definition ApplicationException.hpp:47
WareVersion_t SDKVersion
Definition TypeDefs.hpp:126
std::string BuildType
Definition TypeDefs.hpp:128
std::string CompilerID
Definition TypeDefs.hpp:130
std::string CompilationFlags
Definition TypeDefs.hpp:134
std::string CompilerVersion
Definition TypeDefs.hpp:132