-
Notifications
You must be signed in to change notification settings - Fork 1
/
util.go
74 lines (62 loc) · 1.36 KB
/
util.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
74
package ctftime
import (
"encoding/json"
"io"
"io/ioutil"
"log"
"net/http"
"path"
"strings"
)
/* Test */
// テストに使うjsonファイルのデータを読み込んでくる
func getTestData(fname string) []byte {
fpath := path.Join(test_dir, fname)
data, err := ioutil.ReadFile(fpath)
if err != nil {
log.Fatal(err)
}
return data
}
/* HTTP */
// HTTPレスポンスのボディから構造体へ変換するための関数
func httpResponseToStruct(r *http.Response, v interface{}) {
defer r.Body.Close()
body, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Fatal("[ReadAll] ")
}
err = json.Unmarshal(body, v)
if err != nil {
log.Fatal("[Unmarshal] ")
}
if valid, ok := v.(interface {
OK() error
}); ok {
err = valid.OK()
if err != nil {
log.Fatal("[Validation] ")
}
}
}
// 年度をキーにしているなど、今後キーが変更される場合、mapで取れるようにするための関数
func httpResponseToMap(r *http.Response, v interface{}) {
defer r.Body.Close()
body, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Fatal("[ReadAll ")
}
decoder := json.NewDecoder(strings.NewReader(string(body)))
err = decoder.Decode(&v)
if err != nil && err != io.EOF {
log.Fatal(err)
}
if valid, ok := v.(interface {
OK() error
}); ok {
err = valid.OK()
if err != nil {
log.Fatal("[Validation] ")
}
}
}