| #pragma once | 
 | #include <cstdint> | 
 | #include <nlohmann/json.hpp> | 
 |  | 
 | namespace pcie_function | 
 | { | 
 | // clang-format off | 
 |  | 
 | enum class DeviceClass : std::uint8_t{ | 
 |     Invalid, | 
 |     UnclassifiedDevice, | 
 |     MassStorageController, | 
 |     NetworkController, | 
 |     DisplayController, | 
 |     MultimediaController, | 
 |     MemoryController, | 
 |     Bridge, | 
 |     CommunicationController, | 
 |     GenericSystemPeripheral, | 
 |     InputDeviceController, | 
 |     DockingStation, | 
 |     Processor, | 
 |     SerialBusController, | 
 |     WirelessController, | 
 |     IntelligentController, | 
 |     SatelliteCommunicationsController, | 
 |     EncryptionController, | 
 |     SignalProcessingController, | 
 |     ProcessingAccelerators, | 
 |     NonEssentialInstrumentation, | 
 |     Coprocessor, | 
 |     UnassignedClass, | 
 |     Other, | 
 | }; | 
 |  | 
 | enum class FunctionType : std::uint8_t{ | 
 |     Invalid, | 
 |     Physical, | 
 |     Virtual, | 
 | }; | 
 |  | 
 | enum class FunctionProtocol : std::uint8_t{ | 
 |     Invalid, | 
 |     PCIe, | 
 |     CXL, | 
 | }; | 
 |  | 
 | NLOHMANN_JSON_SERIALIZE_ENUM(DeviceClass, { | 
 |     {DeviceClass::Invalid, "Invalid"}, | 
 |     {DeviceClass::UnclassifiedDevice, "UnclassifiedDevice"}, | 
 |     {DeviceClass::MassStorageController, "MassStorageController"}, | 
 |     {DeviceClass::NetworkController, "NetworkController"}, | 
 |     {DeviceClass::DisplayController, "DisplayController"}, | 
 |     {DeviceClass::MultimediaController, "MultimediaController"}, | 
 |     {DeviceClass::MemoryController, "MemoryController"}, | 
 |     {DeviceClass::Bridge, "Bridge"}, | 
 |     {DeviceClass::CommunicationController, "CommunicationController"}, | 
 |     {DeviceClass::GenericSystemPeripheral, "GenericSystemPeripheral"}, | 
 |     {DeviceClass::InputDeviceController, "InputDeviceController"}, | 
 |     {DeviceClass::DockingStation, "DockingStation"}, | 
 |     {DeviceClass::Processor, "Processor"}, | 
 |     {DeviceClass::SerialBusController, "SerialBusController"}, | 
 |     {DeviceClass::WirelessController, "WirelessController"}, | 
 |     {DeviceClass::IntelligentController, "IntelligentController"}, | 
 |     {DeviceClass::SatelliteCommunicationsController, "SatelliteCommunicationsController"}, | 
 |     {DeviceClass::EncryptionController, "EncryptionController"}, | 
 |     {DeviceClass::SignalProcessingController, "SignalProcessingController"}, | 
 |     {DeviceClass::ProcessingAccelerators, "ProcessingAccelerators"}, | 
 |     {DeviceClass::NonEssentialInstrumentation, "NonEssentialInstrumentation"}, | 
 |     {DeviceClass::Coprocessor, "Coprocessor"}, | 
 |     {DeviceClass::UnassignedClass, "UnassignedClass"}, | 
 |     {DeviceClass::Other, "Other"}, | 
 | }); | 
 |  | 
 | NLOHMANN_JSON_SERIALIZE_ENUM(FunctionType, { | 
 |     {FunctionType::Invalid, "Invalid"}, | 
 |     {FunctionType::Physical, "Physical"}, | 
 |     {FunctionType::Virtual, "Virtual"}, | 
 | }); | 
 |  | 
 | NLOHMANN_JSON_SERIALIZE_ENUM(FunctionProtocol, { | 
 |     {FunctionProtocol::Invalid, "Invalid"}, | 
 |     {FunctionProtocol::PCIe, "PCIe"}, | 
 |     {FunctionProtocol::CXL, "CXL"}, | 
 | }); | 
 |  | 
 | } // namespace pcie_function | 
 | // clang-format on |