From fa91879535a1ca8ad4e436c706a5b3aece5f394a Mon Sep 17 00:00:00 2001 From: philippe44 Date: Sun, 7 May 2023 11:50:46 +0200 Subject: [PATCH] more missing stuff --- .../bell/main/utilities/NanoPBExtensions.cpp | 59 +++++++++++++++++++ .../main/utilities/include/NanoPBExtensions.h | 15 +++++ 2 files changed, 74 insertions(+) create mode 100644 components/spotify/cspot/bell/main/utilities/NanoPBExtensions.cpp create mode 100644 components/spotify/cspot/bell/main/utilities/include/NanoPBExtensions.h diff --git a/components/spotify/cspot/bell/main/utilities/NanoPBExtensions.cpp b/components/spotify/cspot/bell/main/utilities/NanoPBExtensions.cpp new file mode 100644 index 00000000..222a8699 --- /dev/null +++ b/components/spotify/cspot/bell/main/utilities/NanoPBExtensions.cpp @@ -0,0 +1,59 @@ +#include "NanoPBExtensions.h" + +#include // for optional +#include // for string +#include // for vector + +#include +#include + +bool bell::nanopb::encodeString(pb_ostream_t* stream, const pb_field_t* field, + void* const* arg) { + auto& str = *static_cast(*arg); + + if (str.size() > 0) { + if (!pb_encode_tag_for_field(stream, field)) { + return false; + } + + if (!pb_encode_string(stream, (uint8_t*)str.c_str(), str.size())) { + return false; + } + } + + return true; +} + +bool bell::nanopb::encodeBoolean(pb_ostream_t* stream, const pb_field_t* field, + void* const* arg) { + auto& boolean = *static_cast*>(*arg); + + if (boolean.has_value()) { + if (!pb_encode_tag_for_field(stream, field)) { + return false; + } + + if (!pb_encode_varint(stream, boolean.value())) { + return false; + } + } + + return true; +} + +bool bell::nanopb::encodeVector(pb_ostream_t* stream, const pb_field_t* field, + void* const* arg) { + auto& vector = *static_cast*>(*arg); + + if (vector.size() > 0) { + if (!pb_encode_tag_for_field(stream, field)) { + return false; + } + + if (!pb_encode_string(stream, vector.data(), vector.size())) { + return false; + } + } + + return true; +} \ No newline at end of file diff --git a/components/spotify/cspot/bell/main/utilities/include/NanoPBExtensions.h b/components/spotify/cspot/bell/main/utilities/include/NanoPBExtensions.h new file mode 100644 index 00000000..0672eb7f --- /dev/null +++ b/components/spotify/cspot/bell/main/utilities/include/NanoPBExtensions.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +/// Set of helper methods that simplify nanopb usage in C++. +namespace bell::nanopb { +bool encodeString(pb_ostream_t* stream, const pb_field_t* field, + void* const* arg); + +bool encodeVector(pb_ostream_t* stream, const pb_field_t* field, + void* const* arg); + +bool encodeBoolean(pb_ostream_t* stream, const pb_field_t* field, + void* const* arg); +} // namespace bell::nanopb \ No newline at end of file