code:
```d
auto req = new ApplyContact();
data.fromProtobuf!ApplyContact(req);
```
protobuf:
```d
class ApplyContact
{
@Proto(1) string fromId = protoDefaultValue!string;
@Proto(2) string toId = protoDefaultValue!string;
@Proto(3) string message = protoDefaultValue!string;
@Proto(4) string chatId = protoDefaultValue!string;
@Proto(5) ulong timestamp = protoDefaultValue!ulong;
@Proto(6) ContactApplySrc src =
protoDefaultValue!ContactApplySrc;
@Proto(7) uint tagId = protoDefaultValue!uint;
}
```
log:
```log
2023-Oct-16 19:28:51.7708915 | 2772099 | warning | execute |
google.protobuf.common.ProtobufException@/root/.dub/packages/protobuf-0.6.2/protobuf/src/google/protobuf/internal.d(199): Tag value out of range
----------------
/usr/include/dmd/phobos/std/exception.d:515 pure @safe void
std.exception.bailOut!(google.protobuf.common.ProtobufException).bailOut(immutable(char)[], ulong, scope const(char)[]) [0x56522c393626]
/usr/include/dmd/phobos/std/exception.d:436 pure @safe bool
std.exception.enforce!(google.protobuf.common.ProtobufException).enforce!(bool).enforce(bool, lazy const(char)[], immutable(char)[], ulong) [0x56522c3935a2]
/root/.dub/packages/protobuf-0.6.2/protobuf/src/google/protobuf/internal.d:199 pure @safe
std.typecons.Tuple!(uint, "tag", google.protobuf.internal.WireType,
"wireType").Tuple google.protobuf.internal.decodeTag!(ubyte[]).decodeTag(ref ubyte[])
[0x56522c5296ec]
/root/.dub/packages/protobuf-0.6.2/protobuf/src/google/protobuf/decoding.d:192
pure privchat.protocol.contacts.ApplyContact
google.protobuf.decoding.fromProtobuf!(privchat.protocol.contacts.ApplyContact,
ubyte[]).fromProtobuf(ref ubyte[], privchat.protocol.contacts.ApplyContact)
[0x56522c535c58]
source/executor/friend/ApplyFriendExecutor.d:23 void
executor.friend.ApplyContactExecutor.ApplyContactExecutor.applyFriend(msgtrans.TransportContext.TransportContext, msgtrans.MessageBuffer.MessageBuffer) [0x56522c5cfdef]
/root/.dub/packages/hunt-reflection-0.2.1/hunt-reflection/source/witchcraft/mixins/methods.d:160
const std.variant.VariantN!(32uL).VariantN
msgtrans.executor.AbstractExecutor.AbstractExecutor!(executor.friend.ApplyContactExecutor.ApplyContactExecutor).AbstractExecutor.__mixin3.__mixin8.MethodMixin!(executor.friend.ApplyContactExecutor.ApplyContactExecutor,
"applyFriend", 0uL).MethodMixin.invoke(std.variant.VariantN!(32uL).VariantN,
std.variant.VariantN!(32uL).VariantN[]...) [0x56522c5a6d18]
/root/.dub/packages/hunt-reflection-0.2.1/hunt-reflection/source/witchcraft/invocable.d:90
const std.variant.VariantN!(32uL).VariantN
witchcraft.invocable.Invocable.invoke!(std.variant.VariantN!(32uL).VariantN,
Object, msgtrans.TransportContext.TransportContext,
msgtrans.MessageBuffer.MessageBuffer).invoke(Object,
msgtrans.TransportContext.TransportContext,
msgtrans.MessageBuffer.MessageBuffer) [0x56522d025a35]
/root/.dub/packages/msgtrans-0.1.4/msgtrans/source/msgtrans/executor/ExecutorInfo.d:73
nothrow void
msgtrans.executor.ExecutorInfo.ExecutorInfo.execute!().execute(ref
msgtrans.TransportContext.TransportContext,
msgtrans.MessageBuffer.MessageBuffer) [0x56522d02566f]
/root/.dub/packages/msgtrans-0.1.4/msgtrans/source/msgtrans/channel/tcp/TcpServerChannel.d:217
void
msgtrans.channel.tcp.TcpServerChannel.TcpServerChannel.dispatchMessage(hunt.net.Connection.Connection,
msgtrans.MessageBuffer.MessageBuffer) [0x56522d0208b6]
/root/.dub/packages/msgtrans-0.1.4/msgtrans/source/msgtrans/channel/tcp/TcpServerChannel.d:150
hunt.io.channel.Common.DataHandleStatus
msgtrans.channel.tcp.TcpServerChannel.TcpServerChannel.initialize().__anonclass4.messageReceived(hunt.net.Connection.Connection,
Object) [0x56522d020550]
/root/.dub/packages/msgtrans-0.1.4/msgtrans/source/msgtrans/channel/tcp/TcpDecoder.d:112
hunt.io.channel.Common.DataHandleStatus
msgtrans.channel.tcp.TcpDecoder.TcpDecoder.decode(hunt.io.ByteBuffer.ByteBuffer,
hunt.net.Connection.Connection) [0x56522d035c61]
/root/.dub/packages/hunt-net-0.6.6/hunt-net/source/hunt/net/AbstractConnection.d:178
hunt.io.channel.Common.DataHandleStatus
hunt.net.AbstractConnection.AbstractConnection.handleReceivedData(hunt.io.ByteBuffer.ByteBuffer)
[0x56522d2776c0]
/root/.dub/packages/hunt-net-0.6.6/hunt-net/source/hunt/net/AbstractConnection.d:159
hunt.io.channel.Common.DataHandleStatus
hunt.net.AbstractConnection.AbstractConnection.onDataReceived(hunt.io.ByteBuffer.ByteBuffer)
[0x56522d2775eb]
/root/.dub/packages/hunt-1.7.13/hunt/source/hunt/io/channel/posix/AbstractStream.d:83
void
hunt.io.channel.posix.AbstractStream.AbstractStream.onDataReceived(hunt.io.ByteBuffer.ByteBuffer)
[0x56522d3a362c]
/root/.dub/packages/hunt-1.7.13/hunt/source/hunt/io/channel/posix/AbstractStream.d:142
bool hunt.io.channel.posix.AbstractStream.AbstractStream.tryRead()
[0x56522d3a37ab]
/root/.dub/packages/hunt-1.7.13/hunt/source/hunt/io/TcpStream.d:428 void
hunt.io.TcpStream.TcpStream.onRead() [0x56522d3a23a0]
/root/.dub/packages/hunt-1.7.13/hunt/source/hunt/event/selector/Epoll.d:228
void
hunt.event.selector.Epoll.AbstractSelector.handeChannelEvent(hunt.io.channel.AbstractChannel.AbstractChannel,
uint) [0x56522d39adcb]
/root/.dub/packages/hunt-1.7.13/hunt/source/hunt/event/selector/Epoll.d:173 int
hunt.event.selector.Epoll.AbstractSelector.doSelect(long) [0x56522d39ad14]
/root/.dub/packages/hunt-1.7.13/hunt/source/hunt/event/selector/Selector.d:195
void hunt.event.selector.Selector.Selector.onLoop(long) [0x56522d39b66a]
/root/.dub/packages/hunt-1.7.13/hunt/source/hunt/event/selector/Selector.d:155
void hunt.event.selector.Selector.Selector.doRun(void delegate())
[0x56522d39b574]
/root/.dub/packages/hunt-1.7.13/hunt/source/hunt/event/selector/Selector.d:120
nothrow void hunt.event.selector.Selector.Selector.runAsync(long, void
delegate()).__lambda3() [0x56522d39b4a7]
??:? void core.thread.Thread.run() [0x56522d3e80f9]
??:? thread_entryPoint [0x56522d43017b]
??:? [0x7fda50287ea6] |
/root/.dub/packages/msgtrans-0.1.4/msgtrans/source/msgtrans/executor/ExecutorInfo.d:75
```