|
@@ -0,0 +1,28 @@
|
|
|
|
+package config
|
|
|
|
+
|
|
|
|
+import "reflect"
|
|
|
|
+
|
|
|
|
+type IConfig interface {
|
|
|
|
+ Invalidate() error
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func Invalidate(config IConfig) error {
|
|
|
|
+ if config == nil || reflect.ValueOf(config).IsZero() {
|
|
|
|
+ return nil
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ r := reflect.ValueOf(config).Elem()
|
|
|
|
+ for i := 0; i < r.NumField(); i++ {
|
|
|
|
+ if !r.Field(i).CanInterface() || r.Field(i).IsZero() {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if elm, ok := r.Field(i).Interface().(IConfig); ok {
|
|
|
|
+ if er := elm.Invalidate(); er != nil {
|
|
|
|
+ return er
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return nil
|
|
|
|
+}
|