|
@@ -1,23 +1,34 @@
|
|
package config
|
|
package config
|
|
|
|
|
|
-import "reflect"
|
|
|
|
|
|
+import (
|
|
|
|
+ "fmt"
|
|
|
|
+ "reflect"
|
|
|
|
+)
|
|
|
|
|
|
type IConfig interface {
|
|
type IConfig interface {
|
|
Invalidate() error
|
|
Invalidate() error
|
|
}
|
|
}
|
|
|
|
|
|
func Invalidate(config IConfig) error {
|
|
func Invalidate(config IConfig) error {
|
|
- if config == nil || reflect.ValueOf(config).IsZero() {
|
|
|
|
- return nil
|
|
|
|
|
|
+ if config == nil {
|
|
|
|
+ return fmt.Errorf("config must not be a nil")
|
|
}
|
|
}
|
|
|
|
|
|
- r := reflect.ValueOf(config).Elem()
|
|
|
|
- for i := 0; i < r.NumField(); i++ {
|
|
|
|
- if !r.Field(i).CanInterface() || r.Field(i).IsZero() {
|
|
|
|
|
|
+ val := reflect.ValueOf(config)
|
|
|
|
+ if val.Kind() != reflect.Struct {
|
|
|
|
+ if val.IsZero() {
|
|
|
|
+ return fmt.Errorf("config is empty")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ val = reflect.ValueOf(config).Elem()
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for i := 0; i < val.NumField(); i++ {
|
|
|
|
+ if !val.Field(i).CanInterface() || val.Field(i).IsZero() {
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
|
|
|
|
- if elm, ok := r.Field(i).Interface().(IConfig); ok {
|
|
|
|
|
|
+ if elm, ok := val.Field(i).Interface().(IConfig); ok {
|
|
if er := elm.Invalidate(); er != nil {
|
|
if er := elm.Invalidate(); er != nil {
|
|
return er
|
|
return er
|
|
}
|
|
}
|