Files
notify/record_negotiation.go
T

61 lines
2.2 KiB
Go
Raw Normal View History

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
}