pw_protobuf: Generate a StreamDecoder class for messages

This refactors the existing codegen to be able to generate both encoders
and decoders, and starts by creating a simple StreamDecoder with member
functions only for obtaining a typed StreamDecoder for child message
types.

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