From 2aa9bf48f6521c630de846018dec1cb1cc784039 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=BCrgen=20Hannappel?= <juergen.hannappel@desy.de>
Date: Wed, 7 Jul 2021 16:44:20 +0200
Subject: [PATCH] add producer enum equality checks

---
 .../common/internal/asapo_common_c_glue.h     |  9 ++++++
 consumer/api/cpp/src/consumer_c_glue.cpp      |  5 ----
 producer/api/cpp/src/producer_c_glue.cpp      | 29 +++++++++++++++++++
 3 files changed, 38 insertions(+), 5 deletions(-)

diff --git a/common/cpp/include/asapo/common/internal/asapo_common_c_glue.h b/common/cpp/include/asapo/common/internal/asapo_common_c_glue.h
index 6eb5c5cac..d1a85106f 100644
--- a/common/cpp/include/asapo/common/internal/asapo_common_c_glue.h
+++ b/common/cpp/include/asapo/common/internal/asapo_common_c_glue.h
@@ -103,4 +103,13 @@ AsapoHandlerHolder<std::string>* handle_or_null_t(const std::string& object,
 }
 
 
+
+template<typename u, typename t>
+constexpr bool operator==(const u& lhs, const t& rhs) {
+    return static_cast<typename std::make_unsigned<u>::type>(lhs)
+           == static_cast<typename std::make_unsigned<typename std::underlying_type<t>::type>::type>(rhs);
+}
+
+
+
 #endif
diff --git a/consumer/api/cpp/src/consumer_c_glue.cpp b/consumer/api/cpp/src/consumer_c_glue.cpp
index 7edbfe800..a60cbbb7e 100644
--- a/consumer/api/cpp/src/consumer_c_glue.cpp
+++ b/consumer/api/cpp/src/consumer_c_glue.cpp
@@ -52,11 +52,6 @@ typedef AsapoHandlerHolder<asapo::ConsumerErrorData>* AsapoConsumerErrorDataHand
 
 #include <algorithm>
 
-template<typename t>
-constexpr bool operator==(const unsigned int& lhs, const t& rhs) {
-    return lhs == static_cast<typename std::make_unsigned<typename std::underlying_type<t>::type>::type>(rhs);
-}
-
 #define dataGetterStart \
     asapo::MessageData d; \
     asapo::MessageMeta* fi = info ? new asapo::MessageMeta : nullptr; \
diff --git a/producer/api/cpp/src/producer_c_glue.cpp b/producer/api/cpp/src/producer_c_glue.cpp
index 67c58df01..debd7d1ee 100644
--- a/producer/api/cpp/src/producer_c_glue.cpp
+++ b/producer/api/cpp/src/producer_c_glue.cpp
@@ -14,6 +14,35 @@ typedef AsapoHandlerHolder<asapo::MessageHeader>* AsapoMessageHeaderHandle;
 
 extern "C" {
 #include "asapo/producer_c.h"
+    static_assert(kOpcodeUnknownOp == asapo::Opcode::kOpcodeUnknownOp&&
+                  kOpcodeTransferData == asapo::Opcode::kOpcodeTransferData&&
+                  kOpcodeTransferDatasetData == asapo::Opcode::kOpcodeTransferDatasetData&&
+                  kOpcodeStreamInfo == asapo::Opcode::kOpcodeStreamInfo&&
+                  kOpcodeLastStream == asapo::Opcode::kOpcodeLastStream&&
+                  kOpcodeGetBufferData == asapo::Opcode::kOpcodeGetBufferData&&
+                  kOpcodeAuthorize == asapo::Opcode::kOpcodeAuthorize&&
+                  kOpcodeTransferMetaData == asapo::Opcode::kOpcodeTransferMetaData&&
+                  kOpcodeDeleteStream == asapo::Opcode::kOpcodeDeleteStream&&
+                  kOpcodeGetMeta == asapo::Opcode::kOpcodeGetMeta&&
+                  kOpcodeCount == asapo::Opcode::kOpcodeCount,
+                  "incompatible bit reps between c++ and c for asapo::OpCode");
+    static_assert(kTcp == asapo::RequestHandlerType::	              kTcp&&
+                  kFilesystem == asapo::RequestHandlerType::	              kFilesystem,
+                  "incompatible bit reps between c++ and c for asapo::RequestHandlerType");
+
+    static_assert(kInsert == asapo::MetaIngestOp::kInsert&&
+                  kReplace == asapo::MetaIngestOp::kReplace&&
+                  kUpdate == asapo::MetaIngestOp::kUpdate,
+                  "incompatible bit reps between c++ and c for asapo::MetaIngestOp");
+
+    static_assert(None == asapo::LogLevel::None&&
+                  Error == asapo::LogLevel::Error&&
+                  Info == asapo::LogLevel::Info&&
+                  Debug == asapo::LogLevel::Debug&&
+                  Warning == asapo::LogLevel::Warning,
+                  "incompatible bit reps between c++ and c for asapo::LogLevel");
+
+
     AsapoProducerHandle asapo_create_producer(const char* endpoint,
                                               uint8_t n_processing_threads,
                                               AsapoRequestHandlerType type,
-- 
GitLab