簡體   English   中英

協議緩沖區將 oneof 消息拆分到不同的文件

[英]Protocol buffer split oneof message to a different file

我使用 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;
}

文件 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獲取我的消息類型,從而觸發現有源代碼中的大量更改。 如何在不改變訪問方式的情況下將 oneof 部分拆分為另一個文件? 我已經嘗試在兩個文件中聲明Message但這是不允許的。

不, oneMessage不是消息類型,要從另一個文件導入某些內容,它必須是消息類型。 添加一個新的oneofTypeMessage將在圖中添加一個額外的節點,並且不會與原始數據數據兼容。

您可以移動Type1Type2 ,但oneof必須保持原樣; 所以:這是有效的:

文件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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM