func leadershipSettingsAccessorFactory( st *state.State, resources facade.Resources, auth facade.Authorizer, ) *leadershipapiserver.LeadershipSettingsAccessor { registerWatcher := func(serviceId string) (string, error) { service, err := st.Application(serviceId) if err != nil { return "", err } w := service.WatchLeaderSettings() if _, ok := <-w.Changes(); ok { return resources.Register(w), nil } return "", watcher.EnsureErr(w) } getSettings := func(serviceId string) (map[string]string, error) { service, err := st.Application(serviceId) if err != nil { return nil, err } return service.LeaderSettings() } writeSettings := func(token leadership.Token, serviceId string, settings map[string]string) error { service, err := st.Application(serviceId) if err != nil { return err } return service.UpdateLeaderSettings(token, settings) } return leadershipapiserver.NewLeadershipSettingsAccessor( auth, registerWatcher, getSettings, st.LeadershipChecker().LeadershipCheck, writeSettings, ) }