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  }