From d6fa255b1df26a12329a614601a027e074aabeb2 Mon Sep 17 00:00:00 2001 From: xengineering Date: Sat, 20 Dec 2025 14:06:34 +0100 Subject: Add default config parsing This is a first step towards configurability. --- config.go | 38 ++++++++++++++++++++++++++++++++++++++ config_test.go | 14 ++++++++++++++ configs/default.json | 11 +++++++++++ meson.build | 1 + 4 files changed, 64 insertions(+) create mode 100644 config.go create mode 100644 config_test.go create mode 100644 configs/default.json diff --git a/config.go b/config.go new file mode 100644 index 0000000..38f0af9 --- /dev/null +++ b/config.go @@ -0,0 +1,38 @@ +package main + +import ( + _ "embed" + "encoding/json" + "log" +) + +//go:embed configs/default.json +var defaultConfig []byte + +type StartupConfig struct { + MQTT struct { + Broker string `json:"broker"` + ClientID string `json:"client-id"` + TopicPrefix string `json:"topic-prefix"` + } `json:"mqtt"` + + Homematic struct { + CCU string `json:"ccu"` + PollingPeriodMilliseconds int `json:"polling-period-milliseconds"` + } `json:"homematic"` +} + +func (sc *StartupConfig) FromJSON(data []byte) error { + return json.Unmarshal(data, sc) +} + +func GetStartupConfig() StartupConfig { + config := StartupConfig{} + + err := config.FromJSON(defaultConfig) + if err != nil { + log.Fatalf("Could not parse default config: %v", err) + } + + return config +} diff --git a/config_test.go b/config_test.go new file mode 100644 index 0000000..c568a34 --- /dev/null +++ b/config_test.go @@ -0,0 +1,14 @@ +package main + +import ( + "testing" +) + +func TestDefaultConfig(t *testing.T) { + config := StartupConfig{} + + err := config.FromJSON(defaultConfig) + if err != nil { + t.Fatalf("Failed parsing default config from JSON: %v", err) + } +} diff --git a/configs/default.json b/configs/default.json new file mode 100644 index 0000000..9d3fb07 --- /dev/null +++ b/configs/default.json @@ -0,0 +1,11 @@ +{ + "mqtt": { + "broker": "tcp://127.0.0.1:1883", + "client-id": "siaserver", + "topic-prefix": "sia" + }, + "homematic": { + "ccu": "http://127.0.0.1:8080", + "polling-period-milliseconds": 50 + } +} diff --git a/meson.build b/meson.build index 9861cdf..0917410 100644 --- a/meson.build +++ b/meson.build @@ -8,6 +8,7 @@ sia_server = custom_target( meson.current_source_dir() / 'cache.go', meson.current_source_dir() / 'mqtt.go', meson.current_source_dir() / 'homematic.go', + meson.current_source_dir() / 'config.go', ], output : 'sia-server', command : [ -- cgit v1.2.3-70-g09d2