// Copyright 2016 The Fuchsia 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 PERIDOT_LIB_FIREBASE_WATCH_CLIENT_H_
#define PERIDOT_LIB_FIREBASE_WATCH_CLIENT_H_

#include <rapidjson/document.h>

namespace firebase {

class WatchClient {
 public:
  virtual ~WatchClient() {}

  // See
  // https://firebase.google.com/docs/database/rest/retrieve-data#section-rest-streaming
  virtual void OnPut(const std::string& path, const rapidjson::Value& value) = 0;
  virtual void OnPatch(const std::string& path, const rapidjson::Value& value) = 0;
  virtual void OnCancel() = 0;
  virtual void OnAuthRevoked(const std::string& reason) = 0;

  // Called when a Firebase event of incorrect format is received. Such
  // notification is ignored, further events continue to be processed after this
  // call (but clients might choose to close the stream themselves).
  virtual void OnMalformedEvent() = 0;

  // Called when the stream of events can't be established, or is interrupted,
  // or the server closes the connection. No further calls will be made on this
  // WatchClient.
  virtual void OnConnectionError() = 0;
};

}  // namespace firebase

#endif  // PERIDOT_LIB_FIREBASE_WATCH_CLIENT_H_
