gpt4 book ai didi

c++ - 未检查/强制执行 Protobuf C++ 必填字段

转载 作者:搜寻专家 更新时间:2023-10-31 00:09:18 26 4
gpt4 key购买 nike

我是 Protocol Buffers 的新手,目前我看到以下问题:

我们使用 proto2 Protocol Buffers 3.2.0 库的语法并观察 required序列化期间不强制执行字段。

这里是 Catch C++ 测试的基本示例:

syntax = "proto2";

package simple_test;

message SimpleMessage
{
required string field1 = 1;
required string field2 = 2;
}

#include "simple.pb.h"
#include <catch.hpp>
#include <string>

SCENARIO("Verify that serialization with missing required fields fails", "[protobuf]")
{
GIVEN("a message")
{
simple_test::SimpleMessage m;

WHEN("field1 is set and field2 is not and both are required")
{
m.set_field1("aaa");

THEN("serializing this message to string buffer must fail")
{
std::string buffer;
CHECK_FALSE(m.SerializeToString(&buffer));
REQUIRE(buffer.empty());
}
}
}
}

m.SerializeToString(&buffer)返回 truebuffer.empty()false .

我所知道的

required Protobuf v3 中删除了字段。

我的问题

  • 我可以使用 Protobuf v3 执行这些检查的设置或任何类型的配置开关吗?
  • 用例发生了什么:

    proto2使用 Protobuf v3 编译器编译的消息。此消息以部分填充的必填字段结束,并将发送到 Protobuf v2 enpoint,它强制执行 required领域。这是否实际上意味着只是无意义地发送了字节,因为消息无效并将被拒绝?

  • 我是否应该从 v3.2.0 降级到 2.x 以禁止在客户端发送不完整的消息?

最佳答案

我看到了我之前监督过的这份文件:

Standard Message Methods并且有以下文档:

Standard Message Methods

Each message class also contains a number of other methods that let you check or manipulate the entire message, including:

bool IsInitialized() const;: checks if all the required fields have been set.

这就是我需要的! Protobuf 又很棒了!

关于c++ - 未检查/强制执行 Protobuf C++ 必填字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44017445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com