func()

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
}