// NOLINTBEGIN
#pragma once
#include <cstdint>
#include <nlohmann/json.hpp>

namespace connection
{
// clang-format off

enum class ConnectionType : std::uint8_t{
    Invalid,
    Storage,
    Memory,
};

enum class AccessCapability : std::uint8_t{
    Invalid,
    Read,
    Write,
};

enum class AccessState : std::uint8_t{
    Invalid,
    Optimized,
    NonOptimized,
    Standby,
    Unavailable,
    Transitioning,
};

NLOHMANN_JSON_SERIALIZE_ENUM(ConnectionType, {
    {ConnectionType::Invalid, "Invalid"},
    {ConnectionType::Storage, "Storage"},
    {ConnectionType::Memory, "Memory"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(AccessCapability, {
    {AccessCapability::Invalid, "Invalid"},
    {AccessCapability::Read, "Read"},
    {AccessCapability::Write, "Write"},
});

NLOHMANN_JSON_SERIALIZE_ENUM(AccessState, {
    {AccessState::Invalid, "Invalid"},
    {AccessState::Optimized, "Optimized"},
    {AccessState::NonOptimized, "NonOptimized"},
    {AccessState::Standby, "Standby"},
    {AccessState::Unavailable, "Unavailable"},
    {AccessState::Transitioning, "Transitioning"},
});

} // namespace connection
// clang-format on
// NOLINTEND
