...

Source file src/github.com/aws/smithy-go/encoding/httpbinding/query.go

Documentation: github.com/aws/smithy-go/encoding/httpbinding

     1  package httpbinding
     2  
     3  import (
     4  	"encoding/base64"
     5  	"math"
     6  	"math/big"
     7  	"net/url"
     8  	"strconv"
     9  )
    10  
    11  // QueryValue is used to encode query key values
    12  type QueryValue struct {
    13  	query  url.Values
    14  	key    string
    15  	append bool
    16  }
    17  
    18  // NewQueryValue creates a new QueryValue which enables encoding
    19  // a query value into the given url.Values.
    20  func NewQueryValue(query url.Values, key string, append bool) QueryValue {
    21  	return QueryValue{
    22  		query:  query,
    23  		key:    key,
    24  		append: append,
    25  	}
    26  }
    27  
    28  func (qv QueryValue) updateKey(value string) {
    29  	if qv.append {
    30  		qv.query.Add(qv.key, value)
    31  	} else {
    32  		qv.query.Set(qv.key, value)
    33  	}
    34  }
    35  
    36  // Blob encodes v as a base64 query string value
    37  func (qv QueryValue) Blob(v []byte) {
    38  	encodeToString := base64.StdEncoding.EncodeToString(v)
    39  	qv.updateKey(encodeToString)
    40  }
    41  
    42  // Boolean encodes v as a query string value
    43  func (qv QueryValue) Boolean(v bool) {
    44  	qv.updateKey(strconv.FormatBool(v))
    45  }
    46  
    47  // String encodes v as a query string value
    48  func (qv QueryValue) String(v string) {
    49  	qv.updateKey(v)
    50  }
    51  
    52  // Byte encodes v as a query string value
    53  func (qv QueryValue) Byte(v int8) {
    54  	qv.Long(int64(v))
    55  }
    56  
    57  // Short encodes v as a query string value
    58  func (qv QueryValue) Short(v int16) {
    59  	qv.Long(int64(v))
    60  }
    61  
    62  // Integer encodes v as a query string value
    63  func (qv QueryValue) Integer(v int32) {
    64  	qv.Long(int64(v))
    65  }
    66  
    67  // Long encodes v as a query string value
    68  func (qv QueryValue) Long(v int64) {
    69  	qv.updateKey(strconv.FormatInt(v, 10))
    70  }
    71  
    72  // Float encodes v as a query string value
    73  func (qv QueryValue) Float(v float32) {
    74  	qv.float(float64(v), 32)
    75  }
    76  
    77  // Double encodes v as a query string value
    78  func (qv QueryValue) Double(v float64) {
    79  	qv.float(v, 64)
    80  }
    81  
    82  func (qv QueryValue) float(v float64, bitSize int) {
    83  	switch {
    84  	case math.IsNaN(v):
    85  		qv.String(floatNaN)
    86  	case math.IsInf(v, 1):
    87  		qv.String(floatInfinity)
    88  	case math.IsInf(v, -1):
    89  		qv.String(floatNegInfinity)
    90  	default:
    91  		qv.updateKey(strconv.FormatFloat(v, 'f', -1, bitSize))
    92  	}
    93  }
    94  
    95  // BigInteger encodes v as a query string value
    96  func (qv QueryValue) BigInteger(v *big.Int) {
    97  	qv.updateKey(v.String())
    98  }
    99  
   100  // BigDecimal encodes v as a query string value
   101  func (qv QueryValue) BigDecimal(v *big.Float) {
   102  	if i, accuracy := v.Int64(); accuracy == big.Exact {
   103  		qv.Long(i)
   104  		return
   105  	}
   106  	qv.updateKey(v.Text('e', -1))
   107  }
   108  

View as plain text