config.go 1.4 KB

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