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

#ifndef THERMALD_KEY_VALUE_PUBLISHER_H_
#define THERMALD_KEY_VALUE_PUBLISHER_H_

#include <memory>
#include <string>

#include "base/callback.h"
#include "base/callback_list.h"
#include "base/macros.h"

namespace thermald {

// The KeyValuePublisher provides an interface to set a value identified by a
// a key. Subscribers are notified when a value is set.
class KeyValuePublisher {
 public:
  typedef base::Callback<void(const std::string &, int)>
      KeyValuePublisherCallback;
  typedef base::CallbackList<void(const std::string &, int)>::Subscription
      Subscription;

  KeyValuePublisher() {}

  void Publish(const std::string &key, int value) {
    subscribers_.Notify(key, value);
  }

  // Subscribe to be notified when a value is set.
  //
  // Returns a subscription object. The caller must keep a reference to this
  // object for the time the subscription should be active. The subscription
  // is canceled when the object is deleted.
  std::unique_ptr<Subscription> Subscribe(const KeyValuePublisherCallback &cb) {
    return subscribers_.Add(cb);
  }

 private:
  base::CallbackList<void(const std::string &, int)> subscribers_;

  DISALLOW_COPY_AND_ASSIGN(KeyValuePublisher);
};

}  // namespace thermald

#endif // THERMALD_KEY_VALUE_PUBLISHER_H_
