2023-10-01 20:38:38 -07:00
|
|
|
// Package config handles loading the config.
|
|
|
|
|
package config
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"flag"
|
|
|
|
|
"fmt"
|
|
|
|
|
"os"
|
|
|
|
|
|
|
|
|
|
"gopkg.in/yaml.v3"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var Default *Mod
|
|
|
|
|
|
|
|
|
|
type Cmd struct {
|
|
|
|
|
Binary string
|
|
|
|
|
Arguments []string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Config struct {
|
2023-10-03 16:17:34 -07:00
|
|
|
HomeName string `yaml:"home"`
|
|
|
|
|
CameraName string `yaml:"name"`
|
|
|
|
|
H264Cmd *Cmd `yaml:"h264"`
|
|
|
|
|
IVFCmd *Cmd `yaml:"ivf"`
|
|
|
|
|
SensorCmd *Cmd `yaml:"sensor"`
|
|
|
|
|
SensorRateMS int64 `yaml:"sensor_rate_ms"`
|
2023-10-01 20:38:38 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func New(source []byte) (*Config, error) {
|
|
|
|
|
config := &Config{}
|
|
|
|
|
if err := yaml.Unmarshal(source, config); err != nil {
|
|
|
|
|
return nil, fmt.Errorf("failed to parse config: %w", err)
|
|
|
|
|
}
|
|
|
|
|
return config, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Mod struct {
|
|
|
|
|
filePath string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m *Mod) RegisterFlags(fs *flag.FlagSet) {
|
|
|
|
|
fs.StringVar(&m.filePath, "watcher_config", "", "path to the watcher configuration")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m *Mod) Get() (*Config, error) {
|
|
|
|
|
bytes, err := os.ReadFile(m.filePath)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, fmt.Errorf("failed to read file %q: %w", m.filePath, err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
config, err := New(bytes)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return config, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
|
Default = &Mod{}
|
|
|
|
|
Default.RegisterFlags(flag.CommandLine)
|
|
|
|
|
}
|