-
Notifications
You must be signed in to change notification settings - Fork 0
/
quote.go
73 lines (61 loc) · 1.94 KB
/
quote.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package wappa
import (
"context"
"net/http"
"time"
)
const quoteEndpoint endpoint = `estimate`
var quoteFields = map[string]string{
"placeOrigin": "PlaceIdOrigin",
"placeDestiny": "PlaceIdDestiny",
"latOrigin": "LatitudeOrigin",
"lngOrigin": "LongitudeOrigin",
"latDest": "LatitudeDestiny",
"lngDest": "LongitudeDestiny",
"employee": "EmployeeId",
}
type Estimate struct {
Minimum float64 `json:"minimum"`
Maximum float64 `json:"maximum"`
Distance float64 `json:"distance"` // Measured in KM.
Journey DurationMin `json:"journey"`
TimeToPickup DurationSec `json:"timeToPickupValue"`
}
type Icon struct {
Default string `json:"default"`
OnFocus string `json:"onFocus"`
Pin string `json:"pin"`
}
// The available subcategories for this category.
type SubCategory struct {
ID int `json:"id"`
TypeID int `json:"typeId"`
Default bool `json:"default"`
Description string `json:"description"`
Discount float64 `json:"discount"`
Estimate Estimate `json:"estimate"`
Observation string `json:"observation"`
Icon Icon `json:"icon"`
}
// The categories available for the region requested.
type Category struct {
ID int `json:"id"`
Description string `json:"description"`
SubCategories []SubCategory `json:"subcategories"`
}
// DriverResult is the API response payload.
type QuoteResult struct {
Categories []*Category `json:"categories"`
EstimatedAt *time.Time `json:"date"`
}
// QuoteService is responsible for handling
// the requests to the quote resource.
type QuoteService service
// Estimate returns a quote for a ride with the given parameters.
func (qs *QuoteService) Estimate(ctx context.Context, f Filter) (*QuoteResult, error) {
q := &QuoteResult{}
if err := qs.client.Request(ctx, http.MethodGet, quoteEndpoint.Query(f.Values(quoteFields)), nil, q); err != nil {
return nil, err
}
return q, nil
}