- // encode message header
- var header interface{}
- switch msg.GetMessageType() {
- case api.RequestMessage:
- header = &VppRequestHeader{VlMsgID: msgID}
- case api.ReplyMessage:
- header = &VppReplyHeader{VlMsgID: msgID}
- case api.EventMessage:
- header = &VppEventHeader{VlMsgID: msgID}
- default:
- header = &VppOtherHeader{VlMsgID: msgID}
+ // try to recover panic which might possibly occur
+ defer func() {
+ if r := recover(); r != nil {
+ var ok bool
+ if err, ok = r.(error); !ok {
+ err = fmt.Errorf("%v", r)
+ }
+ err = fmt.Errorf("panic occurred during encoding message %s: %v", msg.GetMessageName(), err)
+ }
+ }()
+
+ marshaller, ok := msg.(Marshaler)
+ if !ok {
+ marshaller = Wrapper{msg}