#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; }