From 9ddaa98ff4dc5d51b82d27278cf7204f69f399d4 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Sat, 14 Sep 2024 23:07:28 -0500 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9C=A8=20Load=20config=20from=20TOML?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/config.go | 14 +++++++------- config/load.go | 8 ++++++++ config/load_test.go | 29 +++++++++++++++++++++++++++++ go.mod | 1 + go.sum | 2 ++ 5 files changed, 47 insertions(+), 7 deletions(-) create mode 100644 config/load.go create mode 100644 config/load_test.go diff --git a/config/config.go b/config/config.go index 953ddce..27102a8 100644 --- a/config/config.go +++ b/config/config.go @@ -1,16 +1,16 @@ package config type Config struct { - Name string - Env Env - BaseURL string - Conn ConnSettings + Name string `toml:"name"` + Env Env `toml:"env"` + BaseURL string `toml:"base_url"` + Conn ConnSettings `toml:"conn"` } type ConnSettings struct { - Store string - DSN string - AdditionalSettings map[string]any + Store string `toml:"store"` + DSN string `toml:"dsn"` + Settings map[string]any `toml:"settings"` } func (c Config) Environment() Env { diff --git a/config/load.go b/config/load.go new file mode 100644 index 0000000..3293b65 --- /dev/null +++ b/config/load.go @@ -0,0 +1,8 @@ +package config + +import "github.com/BurntSushi/toml" + +func LoadFromToml(path string) (c Config, err error) { + _, err = toml.DecodeFile(path, &c) + return +} diff --git a/config/load_test.go b/config/load_test.go new file mode 100644 index 0000000..b289496 --- /dev/null +++ b/config/load_test.go @@ -0,0 +1,29 @@ +package config + +import ( + "fmt" + "os" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLoadTomlMissing(t *testing.T) { + _, e := LoadFromToml("not-a-real-filee") + assert.Error(t, e) +} + +func TestLoadTomlGood(t *testing.T) { + tmp, _ := os.CreateTemp("", "*.toml") + defer tmp.Close() + fmt.Fprintln(tmp, `name = "Cool"`) + fmt.Fprintln(tmp, "[conn]") + fmt.Fprintln(tmp, `store = "sqlite"`) + fmt.Fprintln(tmp, "[conn.settings]") + fmt.Fprintln(tmp, `num = 42`) + c, e := LoadFromToml(tmp.Name()) + assert.NoError(t, e) + assert.Equal(t, "Cool", c.Name) + assert.Equal(t, "sqlite", c.Conn.Store) + assert.Equal(t, int64(42), c.Conn.Settings["num"]) +} diff --git a/go.mod b/go.mod index 2b3ca76..2226a1c 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module codeberg.org/danjones000/lenore go 1.23.1 require ( + github.com/BurntSushi/toml v1.4.0 github.com/go-ap/activitypub v0.0.0-20240910141749-b4b8c8aa484c github.com/go-ap/client v0.0.0-20240910141951-13a4f3c4fd53 github.com/go-ap/fedbox v0.0.0-20240910163620-7bcedb2eb399 diff --git a/go.sum b/go.sum index 617a50d..4a5a48b 100644 --- a/go.sum +++ b/go.sum @@ -7,6 +7,8 @@ git.sr.ht/~mariusor/lw v0.0.0-20240906100438-00d2184b2120 h1:OLxL9lel79BV3EHu/AM git.sr.ht/~mariusor/lw v0.0.0-20240906100438-00d2184b2120/go.mod h1:kXJ4JsgGBu7IVBKlrVvGjSLJmpsAGqZwq/JU/kTUaLw= git.sr.ht/~mariusor/ssm v0.0.0-20240811085540-34f24cac52b7 h1:bCGvett+MiEDc5L+T9jByp671KnKRG/iJCCm0fc+21s= git.sr.ht/~mariusor/ssm v0.0.0-20240811085540-34f24cac52b7/go.mod h1:VApG24PG5Ij+tw5zpN5O61FSQU9gJK/cYQwFYM+kkwA= +github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/carlmjohnson/be v0.23.2 h1:1QjPnPJhwGUjsD9+7h98EQlKsxnG5TV+nnEvk0wnkls= github.com/carlmjohnson/be v0.23.2/go.mod h1:KAgPUh0HpzWYZZI+IABdo80wTgY43YhbdsiLYAaSI/Q= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= From b8fc87385065f3a625853130ac2cfab243c91c30 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Sat, 14 Sep 2024 23:58:05 -0500 Subject: [PATCH 2/2] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20main=20to?= =?UTF-8?q?=20load=20toml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Temporary until we set up actually loading from a specific file --- cmd/lenore/main.go | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/cmd/lenore/main.go b/cmd/lenore/main.go index 012cada..edc4dc8 100644 --- a/cmd/lenore/main.go +++ b/cmd/lenore/main.go @@ -4,6 +4,7 @@ package main import ( "fmt" + "os" "codeberg.org/danjones000/lenore" "codeberg.org/danjones000/lenore/config" @@ -11,23 +12,15 @@ import ( ) func main() { - conf := config.Config{ - BaseURL: "http://localhost:4523/", - Conn: config.ConnSettings{ - Store: "sqlite", - DSN: "storage", - }, - } + conf, err := config.LoadFromToml(getTomlFile()) + quitErr(err) + fmt.Printf("%+v\n", conf) db, err := store.MakeStore(conf.Conn.Store, conf) - if err != nil { - panic(err) - } + quitErr(err) app, err := lenore.NewApp(config.Version, conf, db) - if err != nil { - panic(err) - } + quitErr(err) fmt.Println(app) serv := app.Service() @@ -35,3 +28,28 @@ func main() { fmt.Println(string(out)) fmt.Println(serv.ID) } +func quitErr(err error) { + if err != nil { + panic(err) + } +} + +func getTomlFile() string { + tmp, err := os.CreateTemp("", "*.toml") + if err != nil { + panic(err) + } + defer tmp.Close() + + p := tmp.Name() + fmt.Fprintln(tmp, confStr) + return p +} + +var confStr = ` +base_url = "http://localhost:4523/" + +[conn] +store = "sqlite" +dsn = "store" +`