config.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package rest
  2. import (
  3. "fmt"
  4. "net/url"
  5. "strings"
  6. )
  7. type Config struct {
  8. Driver string `json:"driver"`
  9. Filename string `json:"filename"`
  10. Host string `json:"host"`
  11. Port int `json:"port"`
  12. Username string `json:"username"`
  13. Password string `json:"password"`
  14. Database string `json:"database"`
  15. Params map[string]string `json:"params"`
  16. }
  17. func (cfg *Config) ParseDSN() string {
  18. if cfg.Driver == "sqlite3" {
  19. return cfg.Filename
  20. } else if cfg.Driver == "mysql" {
  21. ps := map[string]string{
  22. "charset": "utf8",
  23. "parseTime": "True",
  24. "loc": "Local",
  25. }
  26. if cfg.Params != nil {
  27. for k, v := range cfg.Params {
  28. ps[k] = v
  29. }
  30. }
  31. u := url.Values{}
  32. for k, v := range ps {
  33. u.Set(k, v)
  34. }
  35. return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?",
  36. cfg.Username,
  37. cfg.Password,
  38. cfg.Host,
  39. cfg.Port,
  40. cfg.Database) + u.Encode()
  41. } else if cfg.Driver == "postgres" {
  42. var s string
  43. if cfg.Params != nil {
  44. for k, v := range cfg.Params {
  45. s += k + "=" + v + " "
  46. }
  47. }
  48. s = strings.TrimRight(s, " ")
  49. return fmt.Sprintf("host=%s port=%d user=%s dbname=%s password=%s",
  50. cfg.Host,
  51. cfg.Port,
  52. cfg.Username,
  53. cfg.Database,
  54. cfg.Password) + s
  55. }
  56. return ""
  57. }