diff --git a/include/adclib/adclib_netmsg.h b/include/adclib/adclib_netmsg.h index 1583ef0..5f65537 100644 --- a/include/adclib/adclib_netmsg.h +++ b/include/adclib/adclib_netmsg.h @@ -50,6 +50,11 @@ public: return std::ranges::equal(this->_key, ADCLIB_NETMSG_KEYWORD_ACK); } + bool isERR() const + { + return std::ranges::equal(this->_key, ADCLIB_NETMSG_KEYWORD_ERR); + } + bool isCMD() const { return std::ranges::equal(this->_key, ADCLIB_NETMSG_KEYWORD_CMD); @@ -74,20 +79,34 @@ public: error_t createERR(error_t err) { - return this->setKey(ADCLIB_NETMSG_KEYWORD_ERR, err.value()); + return this->setKeyValue(ADCLIB_NETMSG_KEYWORD_ERR, err.value()); } - template - error_t createSET(ATTR_NAME_T&& attr_name, ValueT&& value) + template + requires(sizeof...(ArgTs) > 0) + error_t createSET(ATTR_NAME_T&& attr_name, ArgTs&&... args) { - return this->setKeyValue(ADCLIB_NETMSG_KEYWORD_SET, std::forward(attr_name), - std::forward(value)); + auto err = this->setKeyValue(ADCLIB_NETMSG_KEYWORD_SET, std::forward(attr_name)); + if (err) { + return err; + } + + return this->appendValue(std::forward(args)...); } - template - error_t createGET(ATTR_NAME_T&& attr_name) + template + error_t createGET(ATTR_NAME_T&& attr_name, ArgTs&&... args) { - return this->setKeyValue(ADCLIB_NETMSG_KEYWORD_GET, std::forward(attr_name)); + auto err = this->setKeyValue(ADCLIB_NETMSG_KEYWORD_GET, std::forward(attr_name)); + if (err) { + return err; + } + + if constexpr (sizeof...(ArgTs)) { + return this->appendValue(std::forward(args)...); + } + + return {}; } template