mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-18 00:47:48 +08:00
57 lines
1.8 KiB
Go
57 lines
1.8 KiB
Go
package query
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
)
|
|
|
|
// Object represents the encoding of Query structures and unions. A Query
|
|
// object is a representation of a mapping of string keys to arbitrary
|
|
// values where there is a fixed set of keys whose values each have their
|
|
// own known type. A serialized object might look like the following:
|
|
//
|
|
// ObjectName.Foo=value
|
|
// &ObjectName.Bar=5
|
|
type Object struct {
|
|
// The query values to add the object to.
|
|
values url.Values
|
|
// The object's prefix, which includes the names of all parent structures
|
|
// and ends with the name of the object. For example, the prefix might be
|
|
// "ParentStructure.ObjectName". This prefix will be used to form the full
|
|
// keys for each member of the object. For example, a member might have the
|
|
// key "ParentStructure.ObjectName.MemberName".
|
|
//
|
|
// While this is currently represented as a string that gets added to, it
|
|
// could also be represented as a stack that only gets condensed into a
|
|
// string when a finalized key is created. This could potentially reduce
|
|
// allocations.
|
|
prefix string
|
|
}
|
|
|
|
func newObject(values url.Values, prefix string) *Object {
|
|
return &Object{
|
|
values: values,
|
|
prefix: prefix,
|
|
}
|
|
}
|
|
|
|
// Key adds the given named key to the Query object.
|
|
// Returns a Value encoder that should be used to encode a Query value type.
|
|
func (o *Object) Key(name string) Value {
|
|
return o.key(name, false)
|
|
}
|
|
|
|
// FlatKey adds the given named key to the Query object.
|
|
// Returns a Value encoder that should be used to encode a Query value type. The
|
|
// value will be flattened if it is a map or array.
|
|
func (o *Object) FlatKey(name string) Value {
|
|
return o.key(name, true)
|
|
}
|
|
|
|
func (o *Object) key(name string, flatValue bool) Value {
|
|
if o.prefix != "" {
|
|
return newValue(o.values, fmt.Sprintf("%s.%s", o.prefix, name), flatValue)
|
|
}
|
|
return newValue(o.values, name, flatValue)
|
|
}
|