pw_protobuf: Distinguish between string and bytes fields

Use a MessageField bit to indicate that the field is a string field, as
opposed to a bytes field. Dedicating a bit to one specific type is an
inefficient use of the field_info_ bits, but there were bits to spare
and this was the simplest way to do this. If more field_info_ bits are
needed in the future, a few of the existing fields could be consolidated
into a single 4-bit field_type that specifies that precise type (e.g.
int32, fixed64, message, etc.).

It is necessary to distinguish between string and bytes in order to
switch from using pw::Vector<char> to pw::InlineString<> for string
fields.

This change also updates C++ codegen to include /*attr_name=*/ comments
for bool arguments to improve readability.

Change-Id: I31a918e8716f330eefddcf22b844d693d382b688
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/110231
Pigweed-Auto-Submit: Wyatt Hepler <hepler@google.com>
Reviewed-by: Armando Montanez <amontanez@google.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
3 files changed
tree: 0f39138cd6afc9d154e8211da7ecdcc6bece9166
  1. .allstar/
  2. build_overrides/
  3. docker/
  4. docs/
  5. pw_allocator/
  6. pw_analog/
  7. pw_android_toolchain/
  8. pw_arduino_build/
  9. pw_assert/
  10. pw_assert_basic/
  11. pw_assert_log/
  12. pw_assert_tokenized/
  13. pw_assert_zephyr/
  14. pw_base64/
  15. pw_bloat/
  16. pw_blob_store/
  17. pw_bluetooth/
  18. pw_bluetooth_hci/
  19. pw_boot/
  20. pw_boot_cortex_m/
  21. pw_build/
  22. pw_build_info/
  23. pw_build_mcuxpresso/
  24. pw_bytes/
  25. pw_checksum/
  26. pw_chrono/
  27. pw_chrono_embos/
  28. pw_chrono_freertos/
  29. pw_chrono_stl/
  30. pw_chrono_threadx/
  31. pw_chrono_zephyr/
  32. pw_cli/
  33. pw_compilation_testing/
  34. pw_console/
  35. pw_containers/
  36. pw_cpu_exception/
  37. pw_cpu_exception_cortex_m/
  38. pw_crypto/
  39. pw_digital_io/
  40. pw_docgen/
  41. pw_doctor/
  42. pw_env_setup/
  43. pw_file/
  44. pw_function/
  45. pw_fuzzer/
  46. pw_hdlc/
  47. pw_hex_dump/
  48. pw_i2c/
  49. pw_i2c_mcuxpresso/
  50. pw_interrupt/
  51. pw_interrupt_cortex_m/
  52. pw_interrupt_zephyr/
  53. pw_kvs/
  54. pw_libc/
  55. pw_log/
  56. pw_log_android/
  57. pw_log_basic/
  58. pw_log_null/
  59. pw_log_rpc/
  60. pw_log_string/
  61. pw_log_tokenized/
  62. pw_log_zephyr/
  63. pw_malloc/
  64. pw_malloc_freelist/
  65. pw_metric/
  66. pw_minimal_cpp_stdlib/
  67. pw_module/
  68. pw_multisink/
  69. pw_package/
  70. pw_persistent_ram/
  71. pw_polyfill/
  72. pw_preprocessor/
  73. pw_presubmit/
  74. pw_protobuf/
  75. pw_protobuf_compiler/
  76. pw_random/
  77. pw_result/
  78. pw_ring_buffer/
  79. pw_router/
  80. pw_rpc/
  81. pw_rust/
  82. pw_snapshot/
  83. pw_software_update/
  84. pw_span/
  85. pw_spi/
  86. pw_status/
  87. pw_stm32cube_build/
  88. pw_stream/
  89. pw_string/
  90. pw_symbolizer/
  91. pw_sync/
  92. pw_sync_baremetal/
  93. pw_sync_embos/
  94. pw_sync_freertos/
  95. pw_sync_stl/
  96. pw_sync_threadx/
  97. pw_sync_zephyr/
  98. pw_sys_io/
  99. pw_sys_io_arduino/
  100. pw_sys_io_baremetal_lm3s6965evb/
  101. pw_sys_io_baremetal_stm32f429/
  102. pw_sys_io_emcraft_sf2/
  103. pw_sys_io_mcuxpresso/
  104. pw_sys_io_stdio/
  105. pw_sys_io_stm32cube/
  106. pw_sys_io_zephyr/
  107. pw_system/
  108. pw_target_runner/
  109. pw_thread/
  110. pw_thread_embos/
  111. pw_thread_freertos/
  112. pw_thread_stl/
  113. pw_thread_threadx/
  114. pw_tls_client/
  115. pw_tls_client_boringssl/
  116. pw_tls_client_mbedtls/
  117. pw_tokenizer/
  118. pw_tool/
  119. pw_toolchain/
  120. pw_trace/
  121. pw_trace_tokenized/
  122. pw_transfer/
  123. pw_unit_test/
  124. pw_varint/
  125. pw_watch/
  126. pw_web/
  127. pw_work_queue/
  128. targets/
  129. third_party/
  130. ts/
  131. zephyr/
  132. .bazelignore
  133. .bazelrc
  134. .clang-format
  135. .clang-tidy
  136. .eslintrc.json
  137. .gitattributes
  138. .gitignore
  139. .gn
  140. .prettierrc.js
  141. .pylintrc
  142. activate.bat
  143. Android.bp
  144. AUTHORS
  145. bootstrap.bat
  146. bootstrap.sh
  147. BUILD.bazel
  148. BUILD.gn
  149. BUILDCONFIG.gn
  150. CMakeLists.txt
  151. jest.config.ts
  152. Kconfig.zephyr
  153. LICENSE
  154. modules.gni
  155. OWNERS
  156. package-lock.json
  157. package.json
  158. PIGWEED_MODULES
  159. PW_PLUGINS
  160. README.md
  161. rollup.config.js
  162. tsconfig.json
  163. WORKSPACE
README.md

Pigweed

Pigweed is an open source collection of embedded-targeted libraries–or as we like to call them, modules. These modules are building blocks and infrastructure that enable faster and more reliable development on small-footprint MMU-less 32-bit microcontrollers like the STMicroelectronics STM32L452 or the Nordic nRF52832.

For more information please see our website: https://pigweed.dev/.

Links