-
Notifications
You must be signed in to change notification settings - Fork 0
/
request.go.tmpl
121 lines (90 loc) · 2.53 KB
/
request.go.tmpl
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
{{- define "request" -}}
{{- $opts := .Opts -}}
-- REQUEST
type Request a =
Request
{ url: String
, decoder : Decoder a
, encoder : Encode.Value
, baseUrl : String
, withCredentials : Bool
, tracker : Maybe String
, timeout : Maybe Float
}
request : {url: String, decoder : Decoder a, encoder : Encode.Value} -> Request a
request { url, decoder, encoder } =
Request
{ url = url
, decoder = decoder
, encoder = encoder
, baseUrl = "{{$opts.baseurl}}"
, withCredentials = {{ if $opts.credentials }}True{{else}}False{{end}}
, timeout = {{ if $opts.timeout }}Just {{ $opts.timeout }}{{ else }}Nothing{{ end }}
, tracker = Nothing
}
withBaseUrl : String -> Request a -> Request a
withBaseUrl baseUrl (Request req) =
Request { req | baseUrl = baseUrl }
withCredentials : Bool -> Request a -> Request a
withCredentials withCreds (Request req) =
Request { req | withCredentials = withCreds }
withTimeout : Maybe Float -> Request a -> Request a
withTimeout timeout (Request req) =
Request { req | timeout = timeout }
withTracker : Maybe String -> Request a -> Request a
withTracker tracker (Request req) =
Request { req | tracker = tracker }
send : (Result Error a -> msg) -> Request a -> Cmd msg
send toMsg (Request req) =
let
url =
req.baseUrl ++ req.url
body =
req.encoder
decoder =
req.decoder
timeout =
req.timeout
tracker =
req.tracker
httpRequest =
if req.withCredentials then
Http.riskyRequest
else
Http.request
in
httpRequest
{ method = "POST"
, headers = []
, url = url
, body = Http.jsonBody body
, expect = expectJson toMsg decoder
, timeout = timeout
, tracker = tracker
}
task : Request a -> Task Error a
task (Request req) =
let
url =
req.baseUrl ++ req.url
body =
req.encoder
decoder =
req.decoder
timeout =
req.timeout
httpTask =
if req.withCredentials then
Http.riskyTask
else
Http.task
in
httpTask
{ method = "POST"
, headers = []
, url = url
, body = Http.jsonBody body
, resolver = jsonResolver decoder
, timeout = timeout
}
{{ end }}