cchat-mock/internal/service/configurator.go

46 lines
1.2 KiB
Go

package service
import (
"encoding/json"
"strconv"
"github.com/diamondburned/cchat"
"github.com/diamondburned/cchat-mock/internal/internet"
)
type Configurator struct{}
func (Configurator) Configuration() (map[string]string, error) {
return map[string]string{
// refer to internet.go
"internet.CanFail": strconv.FormatBool(internet.CanFail),
"internet.MinLatency": strconv.Itoa(internet.MinLatency),
"internet.MaxLatency": strconv.Itoa(internet.MaxLatency),
}, nil
}
func (Configurator) SetConfiguration(config map[string]string) error {
for _, err := range []error{
// shit code, would not recommend. It's only an ok-ish idea here because
// unmarshalConfig() returns ErrInvalidConfigAtField.
unmarshalConfig(config, "internet.CanFail", &internet.CanFail),
unmarshalConfig(config, "internet.MinLatency", &internet.MinLatency),
unmarshalConfig(config, "internet.MaxLatency", &internet.MaxLatency),
} {
if err != nil {
return err
}
}
return nil
}
func unmarshalConfig(config map[string]string, key string, value interface{}) error {
if err := json.Unmarshal([]byte(config[key]), value); err != nil {
return &cchat.ErrInvalidConfigAtField{
Key: key,
Err: err,
}
}
return nil
}