Skip to content

Commit

Permalink
feat: support callback when remote config changed
Browse files Browse the repository at this point in the history
  • Loading branch information
zhenxuanxin committed Feb 4, 2024
1 parent 0e82215 commit aeda052
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions viper.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,8 @@ type Viper struct {
// TODO: should probably be protected with a mutex
encoderRegistry *encoding.EncoderRegistry
decoderRegistry *encoding.DecoderRegistry

onRemoteConfigChange func()
}

// New returns an initialized Viper instance.
Expand Down Expand Up @@ -1959,6 +1961,12 @@ func mergeMaps(src, tgt map[string]any, itgt map[any]any) {
}
}

func OnRemoteConfigChange(run func()) { v.OnRemoteConfigChange(run) }

func (v *Viper) OnRemoteConfigChange(run func()) {
v.onRemoteConfigChange = run
}

// ReadRemoteConfig attempts to get configuration from a remote source
// and read it in the remote configuration registry.
func ReadRemoteConfig() error { return v.ReadRemoteConfig() }
Expand Down Expand Up @@ -2024,6 +2032,10 @@ func (v *Viper) watchKeyValueConfigOnChannel() error {
b := <-rc
reader := bytes.NewReader(b.Value)
v.unmarshalReader(reader, v.kvstore)

if v.onRemoteConfigChange != nil {
v.onRemoteConfigChange()
}
}
}(respc)
return nil
Expand Down

0 comments on commit aeda052

Please sign in to comment.