blob: 413ad825a86ac5b5dabd76c1bcc5adb026af576b [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef GOOGLE_APIS_PEOPLE_PEOPLE_API_REQUESTS_H_
#define GOOGLE_APIS_PEOPLE_PEOPLE_API_REQUESTS_H_
#include <optional>
#include "base/functional/callback_forward.h"
#include "base/memory/weak_ptr.h"
#include "base/types/expected.h"
#include "google_apis/common/api_error_codes.h"
#include "google_apis/common/base_requests.h"
#include "google_apis/people/people_api_request_types.h"
namespace google_apis::people {
struct Person;
// Requires `GaiaConstants::kContactsOAuth2Scope`.
//
// From the People API reference:
//
// Create a new contact and return the person resource for that contact.
//
// Mutate requests for the same user should be sent sequentially to avoid
// increased latency and failures.
//
// https://developers.google.com/people/api/rest/v1/people/createContact
class CreateContactRequest : public UrlFetchRequestBase {
public:
using Callback =
base::OnceCallback<void(base::expected<Person, ApiErrorCode>)>;
CreateContactRequest(RequestSender* sender,
Contact payload,
Callback callback);
CreateContactRequest(const CreateContactRequest&) = delete;
CreateContactRequest& operator=(const CreateContactRequest&) = delete;
~CreateContactRequest() override;
private:
// UrlFetchRequestBase:
GURL GetURL() const override;
ApiErrorCode MapReasonToError(ApiErrorCode code,
const std::string& reason) override;
bool IsSuccessfulErrorCode(ApiErrorCode error) override;
HttpRequestMethod GetRequestType() const override;
bool GetContentData(std::string* upload_content_type,
std::string* upload_content) override;
void ProcessURLFetchResults(
const network::mojom::URLResponseHead* response_head,
const base::FilePath response_file,
std::string response_body) override;
void RunCallbackOnPrematureFailure(ApiErrorCode error) override;
void OnDataParsed(std::optional<Person> person);
base::Value::Dict contact_payload_;
Callback callback_;
base::WeakPtrFactory<CreateContactRequest> weak_ptr_factory_{this};
};
} // namespace google_apis::people
#endif // GOOGLE_APIS_PEOPLE_PEOPLE_API_REQUESTS_H_