go/services/statestore/internal/resp/format.go (35 lines of code) (raw):
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
package resp
import (
"strconv"
)
type Bytes interface{ ~string | ~[]byte }
var separator = []byte{'\r', '\n'}
func appendBlob[T Bytes](data []byte, blob T) []byte {
data = append(data, '$')
data = strconv.AppendInt(data, int64(len(blob)), 10)
data = append(data, separator...)
data = append(data, blob...)
data = append(data, separator...)
return data
}
func OpK[K Bytes](op string, key K, rest ...string) []byte {
data := strconv.AppendInt([]byte{'*'}, int64(len(rest))+2, 10)
data = append(data, separator...)
data = appendBlob(data, op)
data = appendBlob(data, key)
for _, arg := range rest {
data = appendBlob(data, arg)
}
return data
}
func OpKV[K, V Bytes](op string, key K, val V, rest ...string) []byte {
data := strconv.AppendInt([]byte{'*'}, int64(len(rest))+3, 10)
data = append(data, separator...)
data = appendBlob(data, op)
data = appendBlob(data, key)
data = appendBlob(data, val)
for _, arg := range rest {
data = appendBlob(data, arg)
}
return data
}