100-go-mistakes/11-testing/88-utility-package/httptest/main.go
2021-12-27 15:56:17 +01:00

65 lines
1.1 KiB
Go

package main
import (
"encoding/json"
"io"
"net/http"
"strings"
"time"
)
func Handler(w http.ResponseWriter, r *http.Request) {
w.Header().Add("X-API-VERSION", "1.0")
b, _ := io.ReadAll(r.Body)
_, _ = w.Write(append([]byte("hello "), b...))
w.WriteHeader(http.StatusCreated)
}
func (c DurationClient) GetDuration(url string,
lat1, lng1, lat2, lng2 float64) (
time.Duration, error) {
resp, err := c.client.Post(
url, "application/json",
buildRequestBody(lat1, lng1, lat2, lng2),
)
if err != nil {
return 0, err
}
return parseResponseBody(resp.Body)
}
type request struct {
Duration int
}
func buildRequestBody(lat1, lng1, lat2, lng2 float64) io.Reader {
return strings.NewReader("")
}
type DurationClient struct {
client *http.Client
}
func NewDurationClient() DurationClient {
return DurationClient{
client: http.DefaultClient,
}
}
func parseResponseBody(r io.ReadCloser) (time.Duration, error) {
b, err := io.ReadAll(r)
if err != nil {
return 0, err
}
defer func() {
_ = r.Close()
}()
var req request
err = json.Unmarshal(b, &req)
if err != nil {
return 0, err
}
return time.Duration(req.Duration) * time.Second, nil
}