Select Git revision
recovering_middleware.go
config.go 9.18 KiB
package setup
import (
"errors"
"io/fs"
"git.perx.ru/perxis/perxis-go"
"git.perx.ru/perxis/perxis-go/pkg/clients"
"git.perx.ru/perxis/perxis-go/pkg/collections"
"git.perx.ru/perxis/perxis-go/pkg/items"
"git.perx.ru/perxis/perxis-go/pkg/roles"
"github.com/hashicorp/go-multierror"
)
type Config struct {
Roles []RoleConfig
Clients []ClientConfig
Collections []CollectionConfig
Items []ItemConfig
}
func NewConfig() *Config {
return &Config{}
}
// Load загружает Config из файловой системы
// Файлы должны быть расположены в директории со следующей структурой:
// - collections/ - директория с файлами конфигурации коллекций
// - clients/ - директория с файлами конфигурации клиентов
// - items/ - директория с файлами конфигурации элементов
// - roles/ - директория с файлами конфигурации ролей
func (cfg *Config) Load(fsys fs.FS) (*Config, error) {
if subFS, err := fs.Sub(fsys, "collections"); err == nil {
if _, err = cfg.LoadCollections(subFS); err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
}
if subFS, err := fs.Sub(fsys, "items"); err == nil {
if _, err = cfg.LoadItems(subFS); err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
}
if subFS, err := fs.Sub(fsys, "roles"); err == nil {
if _, err = cfg.LoadRoles(subFS); err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
}
if subFS, err := fs.Sub(fsys, "clients"); err == nil {
if _, err = cfg.LoadClients(subFS); err != nil && !errors.Is(err, fs.ErrNotExist) {
return nil, err
}
}
return cfg, nil
}
func (cfg *Config) MustLoad(fsys fs.FS) *Config {
c, err := cfg.Load(fsys)
if err != nil {
panic(err)
}
return c
}
func (cfg *Config) WithCollectionOptions(filter func(c *collections.Collection) bool, opts ...CollectionsOption) *Config {
for i, c := range cfg.Collections {