blob: 4b6fc0a7bd028c3ae0f1be639afeef28c7453071 [file] [log] [blame]
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package statekeys
import (
"strings"
)
// rawKeyBuilder is a helper for building multi-field keys in the format
// that's expected by [cutKeyField].
//
// The zero value of rawKeyBuilder is ready to use.
type rawKeyBuilder struct {
b strings.Builder
w bool
}
// AppendField appends the given string to the key-in-progress as an additional
// field.
//
// The given string must not contain any unquoted commas, because comma is the
// field delimiter. If given an invalid field value this function will panic.
func (b *rawKeyBuilder) AppendField(s string) {
if keyDelimiterIdx(s) != -1 {
panic("key field contains the field delimiter")
}
if b.w {
b.b.WriteByte(',')
}
b.w = true
b.b.WriteString(s)
}
// Raw returns the assembled raw key string.
func (b *rawKeyBuilder) Raw() string {
return b.b.String()
}