You are using staging server - a separate instance of the ESP Component Registry that allows you to try distribution tools and processes without affecting the real registry.
# pb_example
Simple serialization/deserialization example.
Use int, string, bytes, any, oneof fields.
#### Build:
```
idf.py build
```
#### Protobuf
```protobuf
syntax = "proto3";
package example;
import "google/protobuf/any.proto";
import "logs.proto";
message SubMessage {
  int32 val = 1;
}
message foo {
  int32 bar = 1;
  google.protobuf.Any val = 2;
  optional string s = 3;
  optional bytes b = 4;
  oneof test_oneof {
    string name = 5;
    SubMessage sub_message = 6;
  }
  extlib.msg1 m1 = 7;
}
```
#### main/pb_example.cpp:
```cpp
#include "file1.pb.h"
#include "google/protobuf/any.pb.h"
#include "logs.pb.h"
#include "esp_log.h"
static const char* const tag = "pb_example";
extern "C"
void app_main(void)
{
    bool result = false;
    std::string buffer;
    {
        example::foo f{};
        extlib::msg1 m{};
        f.mutable_b()->append("\xAA\xBB\xCC");
        f.mutable_s()->append("def");
        m.add_data(12);
        m.add_data(15);
        f.mutable_val()->PackFrom(m);
        m.clear_data();
        m.add_data(3);
        m.add_data(4);
        *f.mutable_m1() = m;
        f.mutable_sub_message();
        // add oneof and rewrite it
        f.mutable_name()->append("Echpochmuck");
        f.mutable_sub_message()->set_val(99);
        result = f.SerializeToString(&buffer);
        ESP_LOGI(tag, "serialization %s", result ? "OK" : "FAILED");
    }
    {
        example::foo f{};
        extlib::msg1 m{};
        result = f.ParseFromString(buffer);
        ESP_LOGI(tag, "deserialization %s", result ? "OK" : "FAILED");
        ESP_LOGI(tag, "f.s: \'%s\'", f.s().c_str());
        for (const auto& v : f.b()) {
            ESP_LOGI(tag, "f.b: 0x%02X", v);
        }
        result = f.val().UnpackTo(&m);
        ESP_LOGI(tag, "deserialization of Any field %s", result ? "OK" : "FAILED");
        for (const auto& v : m.data()) {
            ESP_LOGI(tag, "m.data: %ld", v);
        }
        for (const auto& v : f.m1().data()) {
            ESP_LOGI(tag, "v.m1.data: %ld", v);
        }
        switch(f.test_oneof_case()) {
        case example::foo::kSubMessage:
            ESP_LOGI(tag, "oneof is f.sub_message().val(): %ld", f.sub_message().val());
            break;
        case example::foo::kName:
            ESP_LOGI(tag, "oneof is f.name(): %s", f.name().c_str());
            break;
        case example::foo::TEST_ONEOF_NOT_SET:
            ESP_LOGI(tag, "oneof is not set");
            break;
        }
    }
}
```
#### components/proto_files/CMakeLists.txt:
```cmake
if(NOT CMAKE_BUILD_EARLY_EXPANSION)
    include(${CMAKE_SOURCE_DIR}/managed_components/albkharisov__esp_google_protobuf/cmake/ProtobufConfig.cmake)
    set(GENERATED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/generated")
    # any.proto is absent in lite environment
    set(ADDITIONAL_PROTO
        google/protobuf/any.proto
    )
    list(APPEND PROTO_DIRS
       repo1
       third_party/repo2
    )
    discover_proto_files(proto_SOURCES generated_SOURCES "${PROTO_DIRS}" ${GENERATED_DIR} ${ADDITIONAL_PROTO})
    message(STATUS "found proto: ")
    foreach(line IN LISTS proto_SOURCES)
        message(STATUS "\t${line}")
    endforeach()
# idf_component_register() checks source files availability
# so create them on this step. Real ones appear during a build step
    foreach(file IN LISTS generated_SOURCES)
        get_filename_component(dir ${file} DIRECTORY)
        make_directory(${dir})
        file(TOUCH ${file})
    endforeach()
endif()
set(generated_INCLUDES
    ${GENERATED_DIR}/dir1
    ${GENERATED_DIR}
)
idf_component_register(
    INCLUDE_DIRS
        "${generated_INCLUDES}"
    SRCS
        ${generated_SOURCES}
    REQUIRES
        albkharisov__esp_google_protobuf
)
# comment this if you want to keep generated CXX files in git index
# and don't want to build protoc and generate proto files each time.
add_proto_generation("${PROTO_DIRS}" "${proto_SOURCES}" ${GENERATED_DIR})
```
                        
                    
                
            To create a project from this example, run:
idf.py create-project-from-example "albkharisov/esp_google_protobuf=1.0.11:pb_example"