package notify const ( recordStreamMetadataCapBatchAckKey = "_notify.record_cap_batch_ack" recordStreamMetadataUseBatchAckKey = "_notify.record_use_batch_ack" recordStreamMetadataCapHalfCloseKey = "_notify.record_cap_half_close" recordStreamMetadataUseHalfCloseKey = "_notify.record_use_half_close" recordStreamMetadataEnabledValue = "1" ) func advertiseRecordStreamOpenMetadata(metadata StreamMetadata) StreamMetadata { metadata = cloneStreamMetadata(metadata) if metadata == nil { metadata = make(StreamMetadata, 1) } delete(metadata, recordStreamMetadataUseHalfCloseKey) metadata[recordStreamMetadataCapBatchAckKey] = recordStreamMetadataEnabledValue metadata[recordStreamMetadataCapHalfCloseKey] = recordStreamMetadataEnabledValue return metadata } func negotiateRecordStreamOpenMetadata(channel StreamChannel, metadata StreamMetadata) (StreamMetadata, StreamMetadata) { metadata = cloneStreamMetadata(metadata) if normalizeStreamChannel(channel) != StreamRecordChannel { return metadata, nil } response := make(StreamMetadata) if metadata[recordStreamMetadataCapBatchAckKey] == recordStreamMetadataEnabledValue { metadata[recordStreamMetadataUseBatchAckKey] = recordStreamMetadataEnabledValue response[recordStreamMetadataUseBatchAckKey] = recordStreamMetadataEnabledValue } delete(metadata, recordStreamMetadataUseHalfCloseKey) if metadata[recordStreamMetadataCapHalfCloseKey] == recordStreamMetadataEnabledValue { metadata[recordStreamMetadataUseHalfCloseKey] = recordStreamMetadataEnabledValue response[recordStreamMetadataUseHalfCloseKey] = recordStreamMetadataEnabledValue } return metadata, response } func mergeStreamMetadata(base StreamMetadata, overlay StreamMetadata) StreamMetadata { if len(base) == 0 && len(overlay) == 0 { return nil } merged := cloneStreamMetadata(base) if merged == nil { merged = make(StreamMetadata, len(overlay)) } for key, value := range overlay { merged[key] = value } return merged } func recordStreamUseBatchAck(metadata StreamMetadata) bool { return metadata[recordStreamMetadataUseBatchAckKey] == recordStreamMetadataEnabledValue } func recordStreamUseHalfClose(metadata StreamMetadata) bool { return metadata[recordStreamMetadataUseHalfCloseKey] == recordStreamMetadataEnabledValue }