[roll third_party/pigweed] pw_protobuf: Add helper for map entry write

Expose low level APIs in pw_protobuf for estimating field size and
writing length-delimited field key and length prefix. Use them to
implement a helper function in pw_software_update for writing proto
map<string, bytes> entries.

Context: UpdateBundle needs to construct the following Manifest
proto message from blob storage:

message Manifest {
  optional SnapshotMetadata snapshot_metadata = 1;
  map<string, TargetsMetadata> targets_metadata = 2;
}

For wire format generation, it is essentially equivalent to the
following definition with a nested `Entry` message.

message Entry {
    string key = 1;
    bytes value = 2;
}

message Manifest {
    optional bytes snapshot_metadata = 1;
    repeated Entry targets_metadata = 2;
}

Although protobuf::StreamEncoder has capability for nested message
encoding, it requires a scratch buffer that shall be at least the
largest sub-message size. In this case, it will be largest
target metadata in the update software bundle, which however, can be
fairly large and difficult to estimate. To avoid the issue, the CL
takes an approach to construct the message from lower level.
Specifically, the CL constructs the delimited field key and length
prefix for `Entry` on its own and write to output, then followed by
writing a regular string field of `key` and bytes field of `value` via
the normal StreamEncoder approach.

Original-Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/59681

https://pigweed.googlesource.com/pigweed/pigweed
third_party/pigweed Rolled-Commits: 03e1b265752f327..931f4d54ab96caa
Roller-URL: https://ci.chromium.org/b/8836171133824955345
Cq-Cl-Tag: roller-builder:pigweed-experimental-roller
Cq-Cl-Tag: roller-bid:8836171133824955345
CQ-Do-Not-Cancel-Tryjobs: true
Change-Id: I6215c3127dd256a065ce48d7aa7255d1f0153065
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/experimental/+/60741
Bot-Commit: Pigweed Integration Roller <pigweed-integration-roller@pigweed.google.com.iam.gserviceaccount.com>
Commit-Queue: Pigweed Integration Roller <pigweed-integration-roller@pigweed.google.com.iam.gserviceaccount.com>
1 file changed
tree: dbb5da8b8fe8016ef50b98bf7608e3f700d22dc8
  1. applications/
  2. build_overrides/
  3. pw_board_led/
  4. pw_board_led_arduino/
  5. pw_board_led_host/
  6. pw_board_led_stm32cube/
  7. pw_board_led_stm32f429i_disc1/
  8. pw_spin_delay/
  9. pw_spin_delay_arduino/
  10. pw_spin_delay_host/
  11. pw_spin_delay_stm32cube/
  12. pw_spin_delay_stm32f429i_disc1/
  13. pw_sys_io_stm32cube/
  14. targets/
  15. third_party/
  16. tools/
  17. .gitattributes
  18. .gitignore
  19. .gitmodules
  20. .gn
  21. activate.bat
  22. banner.txt
  23. bootstrap.bat
  24. bootstrap.sh
  25. BUILD.gn
  26. BUILDCONFIG.gn
  27. env_setup.json
  28. navbar.md
  29. PW_PLUGINS
  30. README.md
README.md

Pigweed Experimental

This repository contains experimental pigweed modules.

Repository setup

Clone this repo with --recursive to get all required submodules.

git clone --recursive https://pigweed.googlesource.com/pigweed/experimental

This will pull the Pigweed source repository into third_party/pigweed. If you already cloned but forgot to --recursive run git submodule update --init to pull all submodules.