/
config.go
76 lines (67 loc) · 1.76 KB
/
config.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
75
76
package pgutil
import (
"encoding/json"
"strings"
pg "github.com/go-pg/pg/v10"
)
type PgConn struct {
Host string
Port string
Addr string `josn:"Addr,omitempty"`
User string `json:"User,omitempty"`
Password string `json:"Password,omitempty"`
Database string `json:"Database,omitempty"`
SSLMode string `json:"sslmode,omitempty"`
}
func NewPgConnJSON(data []byte) (PgConn, error) {
conn := PgConn{}
err := json.Unmarshal(data, &conn)
return conn, err
}
func (conn *PgConn) Address() string {
if len(conn.Addr) > 0 {
return conn.Addr
} else if len(conn.Host) > 0 && len(conn.Port) > 0 {
return conn.Host + ":" + conn.Port
}
return ""
}
func (conn *PgConn) Encode() string {
conn.Trim()
parts := []string{}
if len(conn.User) > 0 {
parts = append(parts, "user="+conn.User)
}
if len(conn.Password) > 0 {
parts = append(parts, "password="+conn.Password)
}
if len(conn.Host) > 0 && len(conn.Port) > 0 {
parts = append(parts, "addr="+conn.Address())
}
if len(conn.Database) > 0 {
parts = append(parts, "dbname="+conn.Database)
}
if len(conn.SSLMode) > 0 {
parts = append(parts, "sslmode="+conn.SSLMode)
}
return strings.Join(parts, " ")
}
func (conn *PgConn) GoPgOptions() *pg.Options {
return &pg.Options{
Addr: conn.Address(),
User: conn.User,
Password: conn.Password,
Database: conn.Database}
}
func (conn *PgConn) Client() *pg.DB {
return pg.Connect(conn.GoPgOptions())
}
func (conn *PgConn) Trim() {
conn.Addr = strings.TrimSpace(conn.Addr)
conn.Host = strings.TrimSpace(conn.Host)
conn.Port = strings.TrimSpace(conn.Port)
conn.User = strings.TrimSpace(conn.User)
conn.Password = strings.TrimSpace(conn.Password)
conn.Database = strings.TrimSpace(conn.Database)
conn.SSLMode = strings.TrimSpace(conn.SSLMode)
}