| // 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 THIRD_PARTY_CLEARCUT_HTTP_CLIENT_H_ |
| #define THIRD_PARTY_CLEARCUT_HTTP_CLIENT_H_ |
| |
| #include <future> |
| #include <map> |
| |
| #include "third_party/tensorflow_statusor/statusor.h" |
| #include "util/status.h" |
| |
| namespace clearcut { |
| |
| using cobalt::util::Status; |
| using tensorflow_statusor::StatusOr; |
| |
| // HTTPResponse contains the response from the server. |
| // |
| // This class is move-only since response may be large. |
| class HTTPResponse { |
| public: |
| std::string response; |
| Status status; |
| int64_t http_code; |
| |
| HTTPResponse() {} |
| HTTPResponse(std::string response, Status status, int64_t http_code) |
| : response(std::move(response)), status(status), http_code(http_code) {} |
| |
| HTTPResponse(HTTPResponse&&) = default; |
| HTTPResponse& operator=(HTTPResponse&&) = default; |
| |
| HTTPResponse(const HTTPResponse&) = delete; |
| HTTPResponse& operator=(const HTTPResponse&) = delete; |
| }; |
| |
| // HTTPRequest contains information used to make a Post request to clearcut. |
| // |
| // This class is non-copyable since url/body may be large. |
| class HTTPRequest { |
| public: |
| std::string url; |
| std::string body; |
| std::map<std::string, std::string> headers; |
| |
| HTTPRequest(std::string url, std::string body = "") |
| : url(std::move(url)), body(std::move(body)) {} |
| HTTPRequest(HTTPRequest&&) = default; |
| HTTPRequest& operator=(HTTPRequest&&) = default; |
| |
| HTTPRequest(const HTTPRequest&) = delete; |
| HTTPRequest& operator=(const HTTPRequest&) = delete; |
| }; |
| |
| class HTTPClient { |
| public: |
| // Post an HTTPRequest which will timeout after |timeout_ms| milliseconds. |
| virtual std::future<StatusOr<HTTPResponse>> Post( |
| HTTPRequest request, std::chrono::steady_clock::time_point deadline) = 0; |
| |
| virtual ~HTTPClient() = default; |
| }; |
| |
| } // namespace clearcut |
| |
| #endif // THIRD_PARTY_CLEARCUT_HTTP_CLIENT_H_ |