123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- package rest
- import (
- "fmt"
- "net/url"
- "strings"
- )
- const (
- DriverSqlite3 = "sqlite3"
- DriverMysql = "mysql"
- DriverPostgres = "postgres"
- )
- type Config struct {
- Driver string `json:"driver"`
- Filename string `json:"filename"`
- Host string `json:"host"`
- Port int `json:"port"`
- Username string `json:"username"`
- Password string `json:"password"`
- Database string `json:"database"`
- Params map[string]string `json:"params"`
- }
- func (cfg *Config) ParseDSN() string {
- if cfg.Driver == DriverSqlite3 {
- return cfg.Filename
- } else if cfg.Driver == DriverMysql {
- ps := map[string]string{
- "charset": "utf8",
- "parseTime": "True",
- "loc": "Local",
- }
- if cfg.Params != nil {
- for k, v := range cfg.Params {
- ps[k] = v
- }
- }
- u := url.Values{}
- for k, v := range ps {
- u.Set(k, v)
- }
- return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?",
- cfg.Username,
- cfg.Password,
- cfg.Host,
- cfg.Port,
- cfg.Database) + u.Encode()
- } else if cfg.Driver == DriverPostgres {
- var s string
- if cfg.Params != nil {
- for k, v := range cfg.Params {
- s += k + "=" + v + " "
- }
- }
- s = strings.TrimRight(s, " ")
- return fmt.Sprintf("host=%s port=%d user=%s dbname=%s password=%s",
- cfg.Host,
- cfg.Port,
- cfg.Username,
- cfg.Database,
- cfg.Password) + s
- }
- return ""
- }
|