vyvanse/vendor/github.com/drone/mq/stomp/header.go

110 lines
2.0 KiB
Go

package stomp
import (
"bytes"
"strconv"
)
const defaultHeaderLen = 5
type item struct {
name []byte
data []byte
}
// Header represents the header section of the STOMP message.
type Header struct {
items []item
itemc int
}
func newHeader() *Header {
return &Header{
items: make([]item, defaultHeaderLen),
}
}
// Get returns the named header value.
func (h *Header) Get(name []byte) (b []byte) {
for i := 0; i < h.itemc; i++ {
if v := h.items[i]; bytes.Equal(v.name, name) {
return v.data
}
}
return
}
// GetString returns the named header value.
func (h *Header) GetString(name string) string {
k := []byte(name)
v := h.Get(k)
return string(v)
}
// GetBool returns the named header value.
func (h *Header) GetBool(name string) bool {
s := h.GetString(name)
b, _ := strconv.ParseBool(s)
return b
}
// GetInt returns the named header value.
func (h *Header) GetInt(name string) int {
s := h.GetString(name)
i, _ := strconv.Atoi(s)
return i
}
// GetInt64 returns the named header value.
func (h *Header) GetInt64(name string) int64 {
s := h.GetString(name)
i, _ := strconv.ParseInt(s, 10, 64)
return i
}
// Field returns the named header value in string format. This is used to
// provide compatibility with the SQL expression evaluation package.
func (h *Header) Field(name []byte) []byte {
return h.Get(name)
}
// Add appens the key value pair to the header.
func (h *Header) Add(name, data []byte) {
h.grow()
h.items[h.itemc].name = name
h.items[h.itemc].data = data
h.itemc++
}
// Index returns the keypair at index i.
func (h *Header) Index(i int) (k, v []byte) {
if i > h.itemc {
return
}
k = h.items[i].name
v = h.items[i].data
return
}
// Len returns the header length.
func (h *Header) Len() int {
return h.itemc
}
func (h *Header) grow() {
if h.itemc > defaultHeaderLen-1 {
h.items = append(h.items, item{})
}
}
func (h *Header) reset() {
h.itemc = 0
h.items = h.items[:defaultHeaderLen]
for i := range h.items {
h.items[i].name = zeroBytes
h.items[i].data = zeroBytes
}
}
var zeroBytes []byte