commit 94fc0a252137290ae4be12dbe19239bac4bb17ec Author: perp Date: Sun Jun 2 12:57:14 2024 +0100 First commit diff --git a/cmd/config.toml b/cmd/config.toml new file mode 100644 index 0000000..1c00eef --- /dev/null +++ b/cmd/config.toml @@ -0,0 +1,10 @@ +[database] +backend = "sqlite3" +url = "gopay.db" +ssl = false +max = 30 +idle = 30 + +[log] +# https://pkg.go.dev/github.com/rs/zerolog#Level +level = "debug" diff --git a/cmd/main.go b/cmd/main.go new file mode 100644 index 0000000..7c3fb9b --- /dev/null +++ b/cmd/main.go @@ -0,0 +1,21 @@ +package main + +import ( + _ "embed" + "fmt" + + "git.supernets.org/perp/gopay/internal/config" +) + +//go:embed config.toml +var content []byte + +// Current version +const version = "0.0.0" + +func main() { + cfg := config.Parse(content) + config.SetupLogger(cfg) + + fmt.Println(cfg.Database) +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..59f47de --- /dev/null +++ b/go.mod @@ -0,0 +1,14 @@ +module git.supernets.org/perp/gopay + +go 1.22.3 + +require ( + github.com/pelletier/go-toml/v2 v2.2.2 + github.com/rs/zerolog v1.33.0 +) + +require ( + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + golang.org/x/sys v0.12.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..de8f9bb --- /dev/null +++ b/go.sum @@ -0,0 +1,35 @@ +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= +github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= +github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/config/config.go b/internal/config/config.go new file mode 100644 index 0000000..d0eb344 --- /dev/null +++ b/internal/config/config.go @@ -0,0 +1,21 @@ +package config + +// Configuration +type Config struct { + Database *Database + Log *Log +} + +// Database configuration +type Database struct { + Backend string `toml:"backend"` + URL string `toml:"url"` + SSL bool `toml:"ssl"` + Max int `toml:"max"` + Idle int `toml:"idle"` +} + +// Log configuration +type Log struct { + Level string `toml:"level"` +} diff --git a/internal/config/parse.go b/internal/config/parse.go new file mode 100644 index 0000000..a7e246b --- /dev/null +++ b/internal/config/parse.go @@ -0,0 +1,35 @@ +package config + +import ( + "os" + + "github.com/pelletier/go-toml/v2" + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" +) + +// Parse config file +func Parse(content []byte) *Config { + // Store config + var cfg *Config + + // Unmarshal toml + err := toml.Unmarshal(content, &cfg) + if err != nil { + log.Panic().Msg(err.Error()) + } + + return cfg +} + +// Setup logger +func SetupLogger(cfg *Config) { + log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stdout}) + + level, err := zerolog.ParseLevel(cfg.Log.Level) + if err != nil { + log.Panic().Msg(err.Error()) + } + + zerolog.SetGlobalLevel(level) +} diff --git a/internal/context/context.go b/internal/context/context.go new file mode 100644 index 0000000..4f4379c --- /dev/null +++ b/internal/context/context.go @@ -0,0 +1,13 @@ +package context + +import "git.supernets.org/perp/gopay/internal/config" + +// Request context +type Context struct { + Config *config.Config +} + +// Return a new Context +func New(config *config.Config) *Context { + return &Context{Config: config} +}