协议缓冲区将单一消息拆分到另一个文件

发布于 2025-02-04 16:11:57 字数 905 浏览 2 评论 0原文

我使用了看起来像这样的nanopb和一个.proto文件(简化):

syntax = "proto3";

message Type1
{
    bool a = 1;
}

message Type2
{
    int32 b = 1;
}

message Message
{
    int32 id = 1;
    oneof oneMessage {
        Type1 messageType1 = 2;
        Type2 messageType2 = 3;
    }
}

我现在需要将onemessage将其拆分为其他.proto文件并导入。我可以做类似的事情: 文件a.proto:

syntax = "proto3";
import "b.proto"
message Message
{
    int32 id = 1;
    oneofTypeMessage aMessage = 2;
}

file b.proto

syntax = "proto3";

message Type1
{
    bool a = 1;
}

message Type2
{
    int32 b = 1;
}

message oneofTypeMessage
{
    oneof oneMessage {
        Type1 messageType1 = 2;
        Type2 messageType2 = 3;
    }
}

,但这意味着我无法使用message.messageType1触发我的消息类型,从而触发了现有源代码中的许多更改。如何将一个部分分为另一个文件而不更改我访问该文件的方式? 我已经尝试在两个文件中声明消息,但不允许使用。

I use nanopb and a .proto file that looks like this (simplified):

syntax = "proto3";

message Type1
{
    bool a = 1;
}

message Type2
{
    int32 b = 1;
}

message Message
{
    int32 id = 1;
    oneof oneMessage {
        Type1 messageType1 = 2;
        Type2 messageType2 = 3;
    }
}

I now need to split the oneMessage to a different .proto file and import it. I can do something like:
file a.proto:

syntax = "proto3";
import "b.proto"
message Message
{
    int32 id = 1;
    oneofTypeMessage aMessage = 2;
}

file b.proto

syntax = "proto3";

message Type1
{
    bool a = 1;
}

message Type2
{
    int32 b = 1;
}

message oneofTypeMessage
{
    oneof oneMessage {
        Type1 messageType1 = 2;
        Type2 messageType2 = 3;
    }
}

But this means I can't get to my message types with message.messageType1, triggering lots of changes in the existing source code. How can I split the oneof part to another file without changing the way I access to it?
I've tried declaring Message in both files but it is not permitted.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心安伴我暖 2025-02-11 16:11:58

编号onemessage不是消息类型,要从另一个文件导入某些内容,它必须是消息类型。添加一个新的OneFypemessage将在图中添加一个其他节点,并且与原始数据不兼容。

您可以移动type1type2,但是Oneof必须保持为was;因此:这是有效的:

文件a.proto

syntax = "proto3";
import "b.proto"
message Message
{
    int32 id = 1;
    oneof oneMessage {
        Type1 messageType1 = 2;
        Type2 messageType2 = 3;
    }
}

文件b.proto

syntax = "proto3";

message Type1
{
    bool a = 1;
}

message Type2
{
    int32 b = 1;
}

No. oneMessage is not a message type, and to import something from another file, it must be a message type. Adding a new oneofTypeMessage would add an additional node in the graph, and would not be data-compatible with the original data.

You can move Type1 and Type2, but the oneof must stay as-was; so: this is valid:

file a.proto:

syntax = "proto3";
import "b.proto"
message Message
{
    int32 id = 1;
    oneof oneMessage {
        Type1 messageType1 = 2;
        Type2 messageType2 = 3;
    }
}

file b.proto:

syntax = "proto3";

message Type1
{
    bool a = 1;
}

message Type2
{
    int32 b = 1;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文