@@ -5,36 +5,42 @@ open Lean
55
66namespace Requests
77
8- def default_headers : Json :=
8+ variable {α β : Type } [ToJson α] [FromJson β]
9+
10+ /-- Default headers to handle json input and output -/
11+ def defaultHeaders : Json :=
912 json% {
1013 "accept" : "application/json" ,
1114 "content-type" : "application/json"
1215 }
1316
14- def renderParams (params : Json) : IO String :=
15- match params with
17+ def formatHeaders (headers : Json) : IO (Array String) :=
18+ match headers with
1619 | Json.obj kvs =>
17- return kvs.fold (fun acc k v => acc ++ #[s! "{ k} = {
20+ return kvs.fold (fun acc k v => acc ++ #["-H" , s! "{ k} : {
1821 match Json.getStr? v with
1922 | Except.error _ => ""
2023 | Except.ok s => s
21- } " ]) #[] |>.joinSep "&"
22- | _ => throw $ IO.userError "Params must be an object"
24+ } " ]) #[]
25+ | _ => throw $ IO.userError "Headers must be an object"
2326
24- def renderHeaders (headers: Json) : IO (Array String) :=
25- match headers with
27+
28+ /-- Format url for get method -/
29+ def formatGetUrl (url : String) (data : α) : IO String :=
30+ match toJson data with
2631 | Json.obj kvs =>
27- return kvs.fold (fun acc k v => acc ++ #["-H" , s! "{ k} : {
32+ let paramStr := kvs.fold (fun acc k v => acc ++ #[s! "{ k} = {
2833 match Json.getStr? v with
2934 | Except.error _ => ""
3035 | Except.ok s => s
31- } " ]) #[]
32- | _ => throw $ IO.userError "Headers must be an object"
36+ } " ]) #[] |>.joinSep "&"
37+ return s! "{ url} ?{ paramStr} "
38+ | _ => throw $ IO.userError "Params must be an object"
3339
34- def get {α β γ : Type } [ToJson α] [FromJson β] [ToJson γ] (url : String) (params: α) (headers: Json := default_headers) : IO β := do
35- let headers ← renderHeaders headers
36- let params ← renderParams (toJson params)
37- let url := url ++ "?" ++ params
40+ /-- Main entry point for get method -/
41+ def get (url : String) (data : α) ( headers: Json := defaultHeaders) : IO β := do
42+ let headers ← formatHeaders headers
43+ let url ← formatGetUrl url data
3844 let out ← IO.Process.output {
3945 cmd := "curl"
4046 args := #["-X" , "GET" , url] ++ headers
@@ -47,8 +53,9 @@ def get {α β γ : Type} [ToJson α] [FromJson β] [ToJson γ] (url : String) (
4753 | throw $ IO.userError s! "From Json failed. { out.stderr} { out.stdout} "
4854 return res
4955
50- def post {α β γ : Type } [ToJson α] [FromJson β] [ToJson γ] (url : String) (data : α) (headers: Json := default_headers): IO β := do
51- let headers ← renderHeaders headers
56+ /-- Main entry point for post method -/
57+ def post (url : String) (data : α) (headers: Json := defaultHeaders): IO β := do
58+ let headers ← formatHeaders headers
5259 let data := (toJson data).pretty UInt64.size
5360 let out ← IO.Process.output {
5461 cmd := "curl"
0 commit comments