Browse Source

添加默认配置项目

fancl 2 years ago
parent
commit
442804ee73
1 changed files with 66 additions and 0 deletions
  1. 66 0
      config.go

+ 66 - 0
config.go

@@ -0,0 +1,66 @@
+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 ""
+}