evalphobia/httpwrapper

View on GitHub
request/parameter.go

Summary

Maintainability
A
0 mins
Test Coverage
package request

import (
    "fmt"
    "net/url"

    "gopkg.in/h2non/gentleman.v2/plugins/multipart"
)

const tagName = "url"

// parseParam creates string of form data from interface value.
func parseParam(param interface{}) string {
    switch v := param.(type) {
    case string:
        return v
    case fmt.Stringer:
        return v.String()
    case url.Values:
        return v.Encode()
    case *url.Values:
        return v.Encode()
    default:
        value := convertToURLValue(tagName, param)
        return value.Encode()
    }
}

// convertToURLValue convert url.Values data from struct data.
func convertToURLValue(tagName string, param interface{}) url.Values {
    result := url.Values{}
    convertTo(tagName, param, &result, func(result interface{}, key string, value interface{}) {
        r := result.(*url.Values)
        r.Add(key, fmt.Sprint(value))
    })
    return result
}

// convertToMultipartData convert multipart.DataFields data from struct data.
func convertToMultipartData(tagName string, param interface{}) multipart.DataFields {
    result := make(map[string]multipart.Values)
    convertTo(tagName, param, &result, func(result interface{}, key string, value interface{}) {
        r := result.(*map[string]multipart.Values)
        rr := *r
        rr[key] = multipart.Values([]string{fmt.Sprint(value)})
    })
    return result
}