http.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package util
  2. import (
  3. "fmt"
  4. "net/http"
  5. "net/url"
  6. "strings"
  7. "github.com/kubecost/cost-model/pkg/util/mapper"
  8. )
  9. //--------------------------------------------------------------------------
  10. // QueryParams
  11. //--------------------------------------------------------------------------
  12. type QueryParams = mapper.PrimitiveMap
  13. // queryParamsMap is mapper.Map adapter for url.Values
  14. type queryParamsMap struct {
  15. values url.Values
  16. }
  17. // mapper.Getter implementation
  18. func (qpm *queryParamsMap) Get(key string) string {
  19. return qpm.values.Get(key)
  20. }
  21. // mapper.Setter implementation
  22. func (qpm *queryParamsMap) Set(key, value string) error {
  23. qpm.values.Set(key, value)
  24. return nil
  25. }
  26. // NewQueryParams creates a primitive map using the request query parameters
  27. func NewQueryParams(values url.Values) QueryParams {
  28. return mapper.NewMapper(&queryParamsMap{values})
  29. }
  30. //--------------------------------------------------------------------------
  31. // Package Funcs
  32. //--------------------------------------------------------------------------
  33. // HeaderString writes the request/response http.Header to a string.
  34. func HeaderString(h http.Header) string {
  35. var sb strings.Builder
  36. var first bool = true
  37. sb.WriteString("{ ")
  38. for k, vs := range h {
  39. if first {
  40. first = false
  41. } else {
  42. sb.WriteString(", ")
  43. }
  44. fmt.Fprintf(&sb, "%s: [ ", k)
  45. for idx, v := range vs {
  46. sb.WriteString(v)
  47. if idx != len(vs)-1 {
  48. sb.WriteString(", ")
  49. }
  50. }
  51. sb.WriteString(" ]")
  52. }
  53. sb.WriteString(" }")
  54. return sb.String()
  55. }