// Package config is an interface for dynamic configuration. package config import ( "context" "gogs.baozhida.cn/zoie/OAuth-core/config/loader" "gogs.baozhida.cn/zoie/OAuth-core/config/reader" "gogs.baozhida.cn/zoie/OAuth-core/config/source" "gogs.baozhida.cn/zoie/OAuth-core/config/source/file" ) // Config is an interface abstraction for dynamic configuration type Config interface { // Values provide the reader.Values interface reader.Values // Init the config Init(opts ...Option) error // Options in the config Options() Options // Close Stop the config loader/watcher Close() error // Load config sources Load(source ...source.Source) error // Sync Force a source changeset sync Sync() error // Watch a value for changes Watch(path ...string) (Watcher, error) } // Watcher is the config watcher type Watcher interface { Next() (reader.Value, error) Stop() error } // Entity 配置实体 type Entity interface { OnChange() } // Options 配置的参数 type Options struct { Loader loader.Loader Reader reader.Reader Source []source.Source // for alternative data Context context.Context Entity Entity } // Option 调用类型 type Option func(o *Options) var ( // DefaultConfig Default Config Manager DefaultConfig Config ) // NewConfig returns new config func NewConfig(opts ...Option) (Config, error) { return newConfig(opts...) } // Bytes Return config as raw json func Bytes() []byte { return DefaultConfig.Bytes() } // Map Return config as a map func Map() map[string]interface{} { return DefaultConfig.Map() } // Scan values to a go type func Scan(v interface{}) error { return DefaultConfig.Scan(v) } // Sync Force a source changeset sync func Sync() error { return DefaultConfig.Sync() } // Get a value from the config func Get(path ...string) reader.Value { return DefaultConfig.Get(path...) } // Load config sources func Load(source ...source.Source) error { return DefaultConfig.Load(source...) } // Watch a value for changes func Watch(path ...string) (Watcher, error) { return DefaultConfig.Watch(path...) } // LoadFile is short hand for creating a file source and loading it func LoadFile(path string) error { return Load(file.NewSource( file.WithPath(path), )) }