blob: abcce0893cf49054dcd6080876b304b080edeedf [file] [log] [blame]
// 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_FIREBASE_H_
#define PERIDOT_LIB_FIREBASE_FIREBASE_H_
#include <functional>
#include <string>
#include <vector>
#include <lib/fit/function.h>
#include <lib/fxl/macros.h>
#include <rapidjson/document.h>
#include "peridot/lib/firebase/status.h"
#include "peridot/lib/firebase/watch_client.h"
namespace firebase {
class Firebase {
public:
Firebase() {}
virtual ~Firebase() {}
// Common parameters:
// |query_params| - array of params that are joined using the "&" separator
// passed verbatim as the query parameter of the request. Can be empty.
// Retrieves the JSON representation of the data under the given path. See
// https://firebase.google.com/docs/database/rest/retrieve-data.
//
// TODO(ppi): support response Content-Length header, see LE-210.
virtual void Get(const std::string& key,
const std::vector<std::string>& query_params,
fit::function<void(Status status,
std::unique_ptr<rapidjson::Value> value)>
callback) = 0;
// Overwrites the data under the given path. Data needs to be a valid JSON
// object or JSON primitive value.
// https://firebase.google.com/docs/database/rest/save-data
virtual void Put(const std::string& key,
const std::vector<std::string>& query_params,
const std::string& data,
fit::function<void(Status status)> callback) = 0;
// Adds or updates multiple keys under the given path. Data needs to be a
// JSON dictionary.
// https://firebase.google.com/docs/database/rest/save-data
virtual void Patch(const std::string& key,
const std::vector<std::string>& query_params,
const std::string& data,
fit::function<void(Status status)> callback) = 0;
// Deletes the data under the given path.
virtual void Delete(const std::string& key,
const std::vector<std::string>& query_params,
fit::function<void(Status status)> callback) = 0;
// Registers the given |watch_client| to receive notifications about changes
// under the given |key|. See
// https://firebase.google.com/docs/database/rest/retrieve-data.
virtual void Watch(const std::string& key,
const std::vector<std::string>& query_params,
WatchClient* watch_client) = 0;
// Unregisters the given |watch_client|. No calls on the client will be made
// after this method returns.
virtual void UnWatch(WatchClient* watch_client) = 0;
private:
FXL_DISALLOW_COPY_AND_ASSIGN(Firebase);
};
} // namespace firebase
#endif // PERIDOT_LIB_FIREBASE_FIREBASE_H_