99 size_t field_offset)
noexcept {
101 field_offset,
nullptr, 0};
118template <
typename T,
typename NestedT>
121 size_t field_offset)
noexcept {
168 "materialpassport owner contact email",
170 offsetof(
Owner, contact_email)),
172 "materialpassport owner contact name",
174 offsetof(
Owner, contact_name)),
176 "materialpassport owner company name",
178 offsetof(
Owner, company_name))};
188 static constexpr const char *
struct_name() noexcept {
return "Owner"; }
198 "designation",
"2_mYRkA$9EcwXAxqBGoMrM",
202 "images",
"1dvQfmc2z9lB_rwknYkM3y",
"construction item image",
206 "has_qr_code",
"06moAxe0j7EutROb0dD3B7",
"has QR code",
210 "has_rfid_tag",
"2$Owq1iHrAuw$ASWOXAk9p",
"has RFID tag",
214 "materials",
"1R_z75Gd52OQYxVkJ$E3ZU",
"material",
218 "assembly_methods",
"0N7Qwopp125xrULezqArw4",
"assembly method",
222 "year_of_installation",
"294ZkUyYn6TfdwCsbo2X63",
226 "year_of_construction",
"17LFECVML6buNXwBLz416Y",
239 return "ConstructionItemDescription";
250 "manufacturer",
"1QwFy1F3T4dPe2N2cbsuRv",
"manufacturer",
253 "gtin",
"1rQ9Z5vy5AygUSncyWuhXr",
"global trade item number (GTIN)",
256 "product_name",
"198tMTFIX5PecEfAwMEIeo",
"product name",
259 "model_label",
"06t2gkj49FNvMebmltrHXV",
"model label",
262 "production_year",
"3nif2XJKH8r9I09LfEYaRm",
"production year",
275 return "ProductInformation";
286 "has_epd",
"2_jn1$mEr1780H5QOiEj6O",
290 "epd_programme_operator",
"0ORiYBKRnCFQzUwOsNqbYn",
294 "epd_operator_web_domain",
"2kqTixLBr9sBqGKYs9lNSI",
298 "epd_registration_number",
"2aCraAVB91qw8CzrM6x3ia",
302 "reference_service_life",
"28mSsPe_z69BksBt5oRXMl",
306 "has_safety_data_sheet",
"3D1KFVwbDBuumnIBZZHQId",
310 "declaration_of_performance",
"1tqCmrJwn3yvF$k2lU2fFa",
314 "technical_documentation",
"1IfrbnqGv5Pu3GBuocLZgi",
318 "non_destructive_tests",
"0aTBceworF$QTXM6CqyOdV",
322 "assessed_period_of_use",
"3xW23JRMTAzOQb79uZW3qC",
326 "avg_service_life_build",
"2TtVRWo_56mBphAcSiFIHG",
330 "remaining_service_life_rsl",
"2id4UZ8ynAF9DEzV0NC_wT",
334 "remaining_service_life_build",
"27gXAA5Iz7lgcOytMRqOBv",
347 return "Certifications";
367 "thickness_mm",
"0SyXPZ9an9vh49k$Lgkvly",
"thickness",
376 "surface_area_m2",
"3Cs4d96Ff1nPGHWlsTyYIS",
380 "inner_diameter_mm",
"0ayREcz2zBuPWmCDTem2a8",
"inner diameter",
383 "outer_diameter_mm",
"3BWwvo0lf3iAd_34y7ac$4",
"outer diameter",
389 "technical_drawing",
"2d01jZqvP7GOR3V$coAprV",
"technical drawing",
400 static constexpr const char *
struct_name() noexcept {
return "Dimensions"; }
410 "photo_documentation",
"3$DH1Zm_r9_gzqdwKK39Ua",
412 offsetof(
Condition, photo_documentation)),
414 "visual_inspection_performed",
"2jB20LC_nEzBN4_j2ypip8",
416 offsetof(
Condition, visual_inspection_performed)),
418 "has_signs_of_damage",
"0rQimGJFHEueqtqwbwBaC5",
420 offsetof(
Condition, has_signs_of_damage)),
428 "is_surface_intact",
"2GO932BuX5EvXOecmhbbl3",
"is surface intact",
431 "has_intact_edges",
"0AoBmqQ9v1pw7ca1VVp_Za",
"has intact edges",
434 "has_signs_of_degradation",
"01lVHQF$XAneE8CFtajgr_",
436 offsetof(
Condition, has_signs_of_degradation))};
446 static constexpr const char *
struct_name() noexcept {
return "Condition"; }
457 "content_method",
"2ympiI4PL6c8ooh9Agqnz4",
461 "analyzed_substance",
"3Y2oTiV9r3NfoZQBVP_Bpx",
465 "cas_number",
"2tZYDby2H2PADWYcTMn50O",
"CAS-number",
468 "ec_number",
"1cV5alHQ93Zu44Uv4Iuqoj",
"EC-number",
471 "concentration_mg_per_kg",
"0yw_0Ggsf6ihdShOA1niRl",
484 return "DangerousSubstance";
498 "lower_interval",
"1dSnTNTGD5YQPcgcbzMJaD",
"emission lower Interval",
501 "upper_interval",
"3YTotdivHEeQS4ij2Xa7PU",
"emission upper Interval",
504 "quantity_type",
"33HQrsPDn9uhOu$7D3HhWU",
"emission quantity type",
507 "measuring_unit",
"3d1HQUJVb23ReixUzvSyvS",
"measuring unit",
521 static constexpr const char *
struct_name() noexcept {
return "Emission"; }
528 "contains_reach_substances",
"2E6_MQ4Cn36f0s6CVYxQOR",
529 "contains substances on REACH's candidate list",
531 offsetof(
Pollution, contains_reach_substances)),
533 "is_chemically_treated",
"1Cf0jFllr2HAk8FOmT2VGr",
535 offsetof(
Pollution, is_chemically_treated)),
537 "surface_treatments",
"1zV5ZyYKT6CPWjKdTEZ1K0",
"surface treatment",
540 "dangerous_substances",
"dangerous substances",
541 offsetof(
Pollution, dangerous_substances)),
543 "emissions",
"release of dangerous substances",
546 "intended_for_indoor_use",
"2W1zl8TFb459xOVytRmX3J",
548 offsetof(
Pollution, intended_for_indoor_use)),
550 "labelling_scheme",
"3Txv$QA7zCp8azbWeuubx2",
"labelling scheme",
553 "emission_level",
"3areU4Rpv9gfbeDNE9eBgA",
"emission level",
556 "has_asbestos_analysis",
"2962p$Lwj68Br6satSNLAn",
558 offsetof(
Pollution, has_asbestos_analysis))};
568 static constexpr const char *
struct_name() noexcept {
return "Pollution"; }
578 "takeback_scheme_available",
"2__I$nkL94YRI_YCBy0ou8",
582 "consists_of_separate_parts",
"2nZqcaXkz7YPHhKI$FMowg",
583 "construction item consists of separate parts naturally ",
596 return "EnvironmentalPotential";
607 "reaction_to_fire",
"2bipZ4JrzDnwNZZHkwfk8O",
"reaction to fire",
610 "resistance_to_fire",
"0NlhENUQr4YA5$p0zBrXSp",
"resistance to fire",
613 "documentation_of_fire_classification",
"1DdkDjj1H7POQtnzDtu7CC",
617 "field_of_application",
"37sNiQNwHC399AW2B60MrY",
630 return "FireProperties";
641 "previous_usage_environments",
"3BiwSSLEz9l8YLgoWcixHq",
643 offsetof(
History, previous_usage_environments))};
653 static constexpr const char *
struct_name() noexcept {
return "History"; }
constexpr PropertyDescriptor make_nested_property(const char *field_name, const char *json_name, size_t field_offset) noexcept
Create a nested object array property descriptor.
constexpr PropertyDescriptor make_property(const char *field_name, const char *leksikon_guid, const char *json_name, PropertyType type, size_t field_offset) noexcept
Create a simple property descriptor (non-nested).
PropertyType
Property type enumeration for MaterialPassport serialization.
@ Boolean
std::optional<bool>
@ EnumValue
Enum values (Material, etc.).
@ EnumArray
std::vector<EnumType>
@ StringArray
std::vector<std::string>
@ Integer
std::optional<int>
@ TriState
TriState enum (yes/no/unknown).
@ Double
std::optional<double>
@ ObjectArray
std::vector<StructType> (nested objects)
Certifications, approvals and declarations for the item.
Condition assessment of the construction item.
Description of the reused construction item.
Dangerous substance analysis record.
Physical dimensions and geometry of the construction item.
Emission measurement record.
Environmental and resource potential for sustainable utilization.
Fire-related properties of the construction item.
Historical usage information for the construction item.
Owner contact information for the material passport.
Pollution, content and emission information.
Property metadata descriptor.
size_t nested_count
For nested types: number of properties in nested array.
const PropertyDescriptor * nested_properties
For nested types (ObjectArray): pointer to nested property array.
const char * field_name
C++ field name (e.g., "contact_email").
size_t offset
Offset of field in struct (calculated via offsetof macro).
const char * leksikon_guid
Molio leksiCon GUID (e.g., "0Bwj05D$55V931bq9VaBE5").
const char * json_name
JSON export name matching the Danish standard template (e.g., "materialpassport owner contact email")...
PropertyType type
Property type enum.
static constexpr std::array properties_array
static constexpr size_t property_count() noexcept
static constexpr const char * struct_name() noexcept
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr size_t property_count() noexcept
static constexpr std::array properties_array
static constexpr const char * struct_name() noexcept
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr std::array properties_array
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr const char * struct_name() noexcept
static constexpr size_t property_count() noexcept
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr const char * struct_name() noexcept
static constexpr std::array properties_array
static constexpr size_t property_count() noexcept
static constexpr std::array properties_array
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr const char * struct_name() noexcept
static constexpr size_t property_count() noexcept
static constexpr size_t property_count() noexcept
static constexpr const char * struct_name() noexcept
static constexpr std::array properties_array
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr const char * struct_name() noexcept
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr size_t property_count() noexcept
static constexpr std::array properties_array
static constexpr size_t property_count() noexcept
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr std::array properties_array
static constexpr const char * struct_name() noexcept
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr size_t property_count() noexcept
static constexpr std::array properties_array
static constexpr const char * struct_name() noexcept
static constexpr std::array properties_array
static constexpr const char * struct_name() noexcept
static constexpr size_t property_count() noexcept
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr const char * struct_name() noexcept
static constexpr const PropertyDescriptor * properties() noexcept
static constexpr std::array properties_array
static constexpr size_t property_count() noexcept
Trait interface for property metadata.
static constexpr const char * struct_name() noexcept
Get human-readable struct name.
static constexpr const PropertyDescriptor * properties() noexcept
Get array of property descriptors.
static constexpr size_t property_count() noexcept
Get number of properties in the struct.