// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_CHROME_BROWSER_SHARED_MODEL_PREFS_PREF_BACKED_BOOLEAN_H_
#define IOS_CHROME_BROWSER_SHARED_MODEL_PREFS_PREF_BACKED_BOOLEAN_H_

#import <Foundation/Foundation.h>

#import <string_view>

#import "ios/chrome/browser/shared/model/utils/observable_boolean.h"

class PrefService;

// An observable boolean backed by a pref from a PrefService.
@interface PrefBackedBoolean : NSObject <ObservableBoolean>

- (instancetype)init NS_UNAVAILABLE;

// Returns a PrefBackedBoolean backed by `prefName` from `prefs`.
- (instancetype)initWithPrefService:(PrefService*)prefs
                           prefName:(std::string_view)prefName
    NS_DESIGNATED_INITIALIZER;

// Stop observing the pref. Can be called before -dealloc to ensure
// that the pref is no longer observed, even if the object survives
// the PrefService (e.g. if the reference is captured by a block).
- (void)stop;

@end

#endif  // IOS_CHROME_BROWSER_SHARED_MODEL_PREFS_PREF_BACKED_BOOLEAN_H_
