Protocol Buffers の oneof 型 は、定義したフィールドのうち、いずれか 1 つのフィールドのみに値が格納されていることを示す型です。
次の SampleMessage
メッセージ型は、1 つの oneof
型フィールド status
を持っています。
message SampleMessage {
string content = 1;
oneof status {
int32 status_code = 2;
string status_name = 3;
}
}
上記の oneof
ブロックには status_code
フィールドと status_name
フィールドが定義されていますが、これらのいずれかのフィールドに値が格納されることを示しています。
実際にどのフィールドに値が格納されているかを調べる方法は、各言語の protobuf ライブラリ実装によって異なります。
下記は C++ の例です。
SampleMessage message;
message.set_status_code(123);
if (message.has_status_code()) {
// ...
}
oneof
のフィールドに値をセットすると、同じ oneof
に含まれる他のフィールドの値はクリアされることに注意してください。
oneof
フィールドに、repeated
ラベル や optional
ラベル を設定することはできません。