in src/message/messageparser.go [254:339]
func (clientMessage *ClientMessage) SerializeClientMessage(log log.T) (result []byte, err error) {
payloadLength := uint32(len(clientMessage.Payload))
headerLength := uint32(ClientMessage_PayloadLengthOffset)
// Set payload length
clientMessage.PayloadLength = payloadLength
totalMessageLength := headerLength + ClientMessage_PayloadLengthLength + payloadLength
result = make([]byte, totalMessageLength)
err = putUInteger(log, result, ClientMessage_HLOffset, headerLength)
if err != nil {
log.Errorf("Could not serialize HeaderLength with error: %v", err)
return make([]byte, 1), err
}
startPosition := ClientMessage_MessageTypeOffset
endPosition := ClientMessage_MessageTypeOffset + ClientMessage_MessageTypeLength - 1
err = putString(log, result, startPosition, endPosition, clientMessage.MessageType)
if err != nil {
log.Errorf("Could not serialize MessageType with error: %v", err)
return make([]byte, 1), err
}
err = putUInteger(log, result, ClientMessage_SchemaVersionOffset, clientMessage.SchemaVersion)
if err != nil {
log.Errorf("Could not serialize SchemaVersion with error: %v", err)
return make([]byte, 1), err
}
err = putULong(log, result, ClientMessage_CreatedDateOffset, clientMessage.CreatedDate)
if err != nil {
log.Errorf("Could not serialize CreatedDate with error: %v", err)
return make([]byte, 1), err
}
err = putLong(log, result, ClientMessage_SequenceNumberOffset, clientMessage.SequenceNumber)
if err != nil {
log.Errorf("Could not serialize SequenceNumber with error: %v", err)
return make([]byte, 1), err
}
err = putULong(log, result, ClientMessage_FlagsOffset, clientMessage.Flags)
if err != nil {
log.Errorf("Could not serialize Flags with error: %v", err)
return make([]byte, 1), err
}
err = putUuid(log, result, ClientMessage_MessageIdOffset, clientMessage.MessageId)
if err != nil {
log.Errorf("Could not serialize MessageId with error: %v", err)
return make([]byte, 1), err
}
hasher := sha256.New()
hasher.Write(clientMessage.Payload)
startPosition = ClientMessage_PayloadDigestOffset
endPosition = ClientMessage_PayloadDigestOffset + ClientMessage_PayloadDigestLength - 1
err = putBytes(log, result, startPosition, endPosition, hasher.Sum(nil))
if err != nil {
log.Errorf("Could not serialize PayloadDigest with error: %v", err)
return make([]byte, 1), err
}
err = putUInteger(log, result, ClientMessage_PayloadTypeOffset, clientMessage.PayloadType)
if err != nil {
log.Errorf("Could not serialize PayloadType with error: %v", err)
return make([]byte, 1), err
}
err = putUInteger(log, result, ClientMessage_PayloadLengthOffset, clientMessage.PayloadLength)
if err != nil {
log.Errorf("Could not serialize PayloadLength with error: %v", err)
return make([]byte, 1), err
}
startPosition = ClientMessage_PayloadOffset
endPosition = ClientMessage_PayloadOffset + int(payloadLength) - 1
err = putBytes(log, result, startPosition, endPosition, clientMessage.Payload)
if err != nil {
log.Errorf("Could not serialize Payload with error: %v", err)
return make([]byte, 1), err
}
return result, nil
}