// Copyright 2018 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 COBALT_UTIL_CLEARCUT_CURL_HTTP_CLIENT_H_
#define COBALT_UTIL_CLEARCUT_CURL_HTTP_CLIENT_H_

#include "third_party/clearcut/http_client.h"
#include "third_party/tensorflow_statusor/statusor.h"

namespace cobalt {
namespace util {
namespace clearcut {

using ::clearcut::HTTPClient;
using ::clearcut::HTTPRequest;
using ::clearcut::HTTPResponse;
using tensorflow_statusor::StatusOr;

// CurlHTTPClient implements clearcut::HTTPClient with a curl backend. This is
// a basic implementation that is designed to be used on linux clients (not
// fuchsia).
class CurlHTTPClient : public clearcut::HTTPClient {
 public:
  CurlHTTPClient();

  std::future<StatusOr<clearcut::HTTPResponse>> Post(
      clearcut::HTTPRequest request,
      std::chrono::steady_clock::time_point deadline);

  static bool global_init_called_;
};

}  // namespace clearcut
}  // namespace util
}  // namespace cobalt

#endif  // COBALT_UTIL_CLEARCUT_CURL_HTTP_CLIENT_H_
