mirror of
https://github.com/hrfee/jfa-go.git
synced 2024-11-08 19:30:10 +00:00
Harvey Tindall
f063b970b4
config-base.yaml is almost identical to json version, except there's no "order" field, as "sections" and "settings" fields are now lists themselves and so Go can parse the correct order. As such, removed enumerate_config.py. Also, rewrote scripts/generate_ini.py in Go as scripts/ini/. Config structure in Go form is now in common/config.go, and is used by jfa-go and the ini script. app.configBase is now untouched once read from config-base.yaml, and instead copied to and patched in app.patchedConfig. Patching occurs at program start and config modification, so GetConfig is now just a couple of lines. Discord role patching still occurs in GetConfig, as the available roles can change regularly. Also added new "Disabled" field to sections, to avoid the nightmare of deleting from an array.
63 lines
2.6 KiB
Go
63 lines
2.6 KiB
Go
package common
|
|
|
|
type SectionMeta struct {
|
|
Name string `json:"name" yaml:"name" example:"My Section"` // friendly name of the section
|
|
Description string `json:"description" yaml:"description"`
|
|
Advanced bool `json:"advanced,omitempty" yaml:"advanced,omitempty"`
|
|
Disabled bool `json:"disabled,omitempty" yaml:"disabled,omitempty"`
|
|
DependsTrue string `json:"depends_true,omitempty" yaml:"depends_true,omitempty"`
|
|
DependsFalse string `json:"depends_false,omitempty" yaml:"depends_false,omitempty"`
|
|
WikiLink string `json:"wiki_link,omitempty" yaml:"wiki_link,omitempty"`
|
|
}
|
|
|
|
type Option [2]string
|
|
|
|
type SettingType string
|
|
|
|
var (
|
|
BoolType SettingType = "bool"
|
|
SelectType SettingType = "select"
|
|
TextType SettingType = "text"
|
|
PasswordType SettingType = "password"
|
|
NumberType SettingType = "number"
|
|
NoteType SettingType = "note"
|
|
EmailType SettingType = "email"
|
|
ListType SettingType = "list"
|
|
)
|
|
|
|
type Setting struct {
|
|
Setting string `json:"setting" yaml:"setting" example:"my_setting"`
|
|
Name string `json:"name" yaml:"name" example:"My Setting"`
|
|
Description string `json:"description" yaml:"description"`
|
|
Required bool `json:"required" yaml:"required"`
|
|
RequiresRestart bool `json:"requires_restart" yaml:"requires_restart"`
|
|
Advanced bool `json:"advanced,omitempty" yaml:"advanced,omitempty"`
|
|
Type SettingType `json:"type" yaml:"type"` // Type (string, number, bool, etc.)
|
|
Value any `json:"value" yaml:"value"`
|
|
Options []Option `json:"options,omitempty" yaml:"options,omitempty"`
|
|
DependsTrue string `json:"depends_true,omitempty" yaml:"depends_true,omitempty"` // If specified, this field is enabled when the specified bool setting is enabled.
|
|
DependsFalse string `json:"depends_false,omitempty" yaml:"depends_false,omitempty"` // If specified, opposite behaviour of DependsTrue.
|
|
Style string `json:"style,omitempty" yaml:"style,omitempty"`
|
|
Deprecated bool `json:"deprecated,omitempty" yaml:"deprecated,omitempty"`
|
|
WikiLink string `json:"wiki_link,omitempty" yaml:"wiki_link,omitempty"`
|
|
}
|
|
|
|
type Section struct {
|
|
Section string `json:"section" yaml:"section" example:"my_section"`
|
|
Meta SectionMeta `json:"meta" yaml:"meta"`
|
|
Settings []Setting `json:"settings" yaml:"settings"`
|
|
}
|
|
|
|
type Config struct {
|
|
Sections []Section `json:"sections" yaml:"sections"`
|
|
}
|
|
|
|
func (c *Config) removeSection(section string) {
|
|
for i, v := range c.Sections {
|
|
if v.Section == section {
|
|
c.Sections = append(c.Sections[:i], c.Sections[i+1:]...)
|
|
break
|
|
}
|
|
}
|
|
}
|