-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathclient.go
63 lines (56 loc) · 1.18 KB
/
client.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
package splitwise
import (
"encoding/json"
"fmt"
"net/http"
)
type Client interface {
Users
Groups
Friends
Expenses
Currencies
Categories
}
const (
ServerAddress = "https://secure.splitwise.com"
)
// NewClient returns a new Client with the given AuthProvider
func NewClient(authProvider AuthProvider) Client {
return &client{
AuthProvider: authProvider,
baseURL: ServerAddress,
client: http.DefaultClient,
}
}
type client struct {
AuthProvider
baseURL string
client *http.Client
}
func (c client) checkError(res *http.Response) error {
switch {
case res.StatusCode/100 == 1:
return nil
case res.StatusCode/100 == 2:
return nil
case res.StatusCode/100 == 3:
return nil
case res.StatusCode == 401:
return ErrInvalidToken
case res.StatusCode == 403:
return ErrPermissionDenied
case res.StatusCode == 404:
return ErrRecordNotFound
case res.StatusCode == 500:
return ErrSplitwiseServer
default:
// This case normally should not be happened
var response interface{}
err := json.NewDecoder(res.Body).Decode(&response)
if err != nil {
return err
}
return fmt.Errorf("unknown API status code: %d - payload: %+v", res.StatusCode, response)
}
}