Open
Description
I have the following (simplified) proto2 definition:
syntax = "proto2";
message SessionCommand {
enum SessionCommandType {
PING = 1000;
// etc
}
extensions 100 to max;
}
message Command_Ping {
extend SessionCommand {
optional Command_Ping ext = 1000;
}
}
// etc
When decoding a Command_Ping (when i don't know what message type i'm looking at) I get the following struct:
iex> Proto.SessionCommand.decode!(<<194, 62, 0>>)
%Proto.SessionCommand{__uf__: [{1000, 2, ""}]}
I then have to detect and correctly decode the extension with something like this:
defp decode(cmd, encoded) do
[{id, _, _}] = SessionCommand.unknown_fields(cmd)
case SessionCommandType.decode(id) do
:PING ->
Command_Ping.decode!(encoded)
end
end
It would be much nicer if the SessionCommand decoder had a way to know what messages extend it, and then automatically decode to the correct struct (or decode them into some well-known field on the SessionCommand)
Activity