github.com/hashgraph/hedera-sdk-go/v2@v2.48.0/topic_message.go (about) 1 package hedera 2 3 /*- 4 * 5 * Hedera Go SDK 6 * 7 * Copyright (C) 2020 - 2024 Hedera Hashgraph, LLC 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * 21 */ 22 23 import ( 24 "time" 25 26 "github.com/hashgraph/hedera-protobufs-go/mirror" 27 ) 28 29 // TopicMessage is a message from a topic} 30 type TopicMessage struct { 31 ConsensusTimestamp time.Time 32 Contents []byte 33 RunningHash []byte 34 SequenceNumber uint64 35 Chunks []TopicMessageChunk 36 TransactionID *TransactionID 37 } 38 39 func _TopicMessageOfSingle(resp *mirror.ConsensusTopicResponse) TopicMessage { 40 return TopicMessage{ 41 ConsensusTimestamp: _TimeFromProtobuf(resp.ConsensusTimestamp), 42 Contents: resp.Message, 43 RunningHash: resp.RunningHash, 44 SequenceNumber: resp.SequenceNumber, 45 Chunks: nil, 46 TransactionID: nil, 47 } 48 } 49 50 func _TopicMessageOfMany(message []*mirror.ConsensusTopicResponse) TopicMessage { 51 length := len(message) 52 size := uint64(0) 53 chunks := make([]TopicMessageChunk, length) 54 messages := make([][]byte, length) 55 var transactionID *TransactionID = nil 56 57 for _, m := range message { 58 if transactionID == nil { 59 value := _TransactionIDFromProtobuf(m.ChunkInfo.InitialTransactionID) 60 transactionID = &value 61 } 62 63 chunks[m.ChunkInfo.Number-1] = _NewTopicMessageChunk(m) 64 messages[m.ChunkInfo.Number-1] = m.Message 65 size += uint64(len(m.Message)) 66 } 67 68 finalMessage := make([]byte, 0, size) 69 70 for _, m := range messages { 71 finalMessage = append(finalMessage, m...) 72 } 73 74 return TopicMessage{ 75 ConsensusTimestamp: _TimeFromProtobuf(message[length-1].ConsensusTimestamp), 76 RunningHash: message[length-1].RunningHash, 77 SequenceNumber: message[length-1].SequenceNumber, 78 Contents: finalMessage, 79 Chunks: chunks, 80 TransactionID: transactionID, 81 } 82 }