diff --git a/allocator.go b/allocator.go index f2925e7..e4aa900 100644 --- a/allocator.go +++ b/allocator.go @@ -6,9 +6,9 @@ package amqp091 import ( - "bytes" "fmt" "math/big" + "strings" ) const ( @@ -42,9 +42,9 @@ func newAllocator(low, high int) *allocator { // "allocator[low..high] reserved..until" // // O(N) where N is high-low -func (a allocator) String() string { - b := &bytes.Buffer{} - fmt.Fprintf(b, "allocator[%d..%d]", a.low, a.high) +func (a *allocator) String() string { + var b strings.Builder + fmt.Fprintf(&b, "allocator[%d..%d]", a.low, a.high) for low := a.low; low <= a.high; low++ { high := low @@ -53,9 +53,9 @@ func (a allocator) String() string { } if high > low+1 { - fmt.Fprintf(b, " %d..%d", low, high-1) + fmt.Fprintf(&b, " %d..%d", low, high-1) } else if high > low { - fmt.Fprintf(b, " %d", high-1) + fmt.Fprintf(&b, " %d", high-1) } low = high diff --git a/write.go b/write.go index a65514d..dbe5906 100644 --- a/write.go +++ b/write.go @@ -10,6 +10,7 @@ import ( "bytes" "encoding/binary" "errors" + "fmt" "io" "math" "time" @@ -409,17 +410,23 @@ func writeField(w io.Writer, value interface{}) (err error) { return } +// writeTable serializes a Table to the given writer. +// It writes each key-value pair and returns the serialized data as a longstr. func writeTable(w io.Writer, table Table) (err error) { var buf bytes.Buffer for key, val := range table { if err = writeShortstr(&buf, key); err != nil { - return + return fmt.Errorf("writing key %q: %w", key, err) } if err = writeField(&buf, val); err != nil { - return + return fmt.Errorf("writing value for key %q: %w", key, err) } } - return writeLongstr(w, buf.String()) + if err := writeLongstr(w, buf.String()); err != nil { + return fmt.Errorf("writing final long string: %w", err) + } + + return nil }