mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 18:13:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			108 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package httpbinding
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/base64"
 | 
						|
	"math"
 | 
						|
	"math/big"
 | 
						|
	"net/url"
 | 
						|
	"strconv"
 | 
						|
)
 | 
						|
 | 
						|
// QueryValue is used to encode query key values
 | 
						|
type QueryValue struct {
 | 
						|
	query  url.Values
 | 
						|
	key    string
 | 
						|
	append bool
 | 
						|
}
 | 
						|
 | 
						|
// NewQueryValue creates a new QueryValue which enables encoding
 | 
						|
// a query value into the given url.Values.
 | 
						|
func NewQueryValue(query url.Values, key string, append bool) QueryValue {
 | 
						|
	return QueryValue{
 | 
						|
		query:  query,
 | 
						|
		key:    key,
 | 
						|
		append: append,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (qv QueryValue) updateKey(value string) {
 | 
						|
	if qv.append {
 | 
						|
		qv.query.Add(qv.key, value)
 | 
						|
	} else {
 | 
						|
		qv.query.Set(qv.key, value)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Blob encodes v as a base64 query string value
 | 
						|
func (qv QueryValue) Blob(v []byte) {
 | 
						|
	encodeToString := base64.StdEncoding.EncodeToString(v)
 | 
						|
	qv.updateKey(encodeToString)
 | 
						|
}
 | 
						|
 | 
						|
// Boolean encodes v as a query string value
 | 
						|
func (qv QueryValue) Boolean(v bool) {
 | 
						|
	qv.updateKey(strconv.FormatBool(v))
 | 
						|
}
 | 
						|
 | 
						|
// String encodes v as a query string value
 | 
						|
func (qv QueryValue) String(v string) {
 | 
						|
	qv.updateKey(v)
 | 
						|
}
 | 
						|
 | 
						|
// Byte encodes v as a query string value
 | 
						|
func (qv QueryValue) Byte(v int8) {
 | 
						|
	qv.Long(int64(v))
 | 
						|
}
 | 
						|
 | 
						|
// Short encodes v as a query string value
 | 
						|
func (qv QueryValue) Short(v int16) {
 | 
						|
	qv.Long(int64(v))
 | 
						|
}
 | 
						|
 | 
						|
// Integer encodes v as a query string value
 | 
						|
func (qv QueryValue) Integer(v int32) {
 | 
						|
	qv.Long(int64(v))
 | 
						|
}
 | 
						|
 | 
						|
// Long encodes v as a query string value
 | 
						|
func (qv QueryValue) Long(v int64) {
 | 
						|
	qv.updateKey(strconv.FormatInt(v, 10))
 | 
						|
}
 | 
						|
 | 
						|
// Float encodes v as a query string value
 | 
						|
func (qv QueryValue) Float(v float32) {
 | 
						|
	qv.float(float64(v), 32)
 | 
						|
}
 | 
						|
 | 
						|
// Double encodes v as a query string value
 | 
						|
func (qv QueryValue) Double(v float64) {
 | 
						|
	qv.float(v, 64)
 | 
						|
}
 | 
						|
 | 
						|
func (qv QueryValue) float(v float64, bitSize int) {
 | 
						|
	switch {
 | 
						|
	case math.IsNaN(v):
 | 
						|
		qv.String(floatNaN)
 | 
						|
	case math.IsInf(v, 1):
 | 
						|
		qv.String(floatInfinity)
 | 
						|
	case math.IsInf(v, -1):
 | 
						|
		qv.String(floatNegInfinity)
 | 
						|
	default:
 | 
						|
		qv.updateKey(strconv.FormatFloat(v, 'f', -1, bitSize))
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// BigInteger encodes v as a query string value
 | 
						|
func (qv QueryValue) BigInteger(v *big.Int) {
 | 
						|
	qv.updateKey(v.String())
 | 
						|
}
 | 
						|
 | 
						|
// BigDecimal encodes v as a query string value
 | 
						|
func (qv QueryValue) BigDecimal(v *big.Float) {
 | 
						|
	if i, accuracy := v.Int64(); accuracy == big.Exact {
 | 
						|
		qv.Long(i)
 | 
						|
		return
 | 
						|
	}
 | 
						|
	qv.updateKey(v.Text('e', -1))
 | 
						|
}
 |