Skip to content

Commit f9e8e46

Browse files
committed
refactor: use more instance
1 parent cefc868 commit f9e8e46

1 file changed

Lines changed: 24 additions & 17 deletions

File tree

Requests/Basic.lean

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,36 +5,42 @@ open Lean
55

66
namespace 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 paramsrenderParams (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 headersformatHeaders 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

Comments
 (0)