#ifndef GOOGLE_APIS_DRIVE_DRIVE_API_PARSER_H_
#define GOOGLE_APIS_DRIVE_DRIVE_API_PARSER_H_
#include <stdint.h>
#include <memory>
#include <string>
#include <string_view>
#include <utility>
#include <vector>
#include "base/compiler_specific.h"
#include "base/gtest_prod_util.h"
#include "base/time/time.h"
#include "url/gurl.h"
namespace base {
class Value;
template <class StructType>
class JSONValueConverter;
namespace internal {
template <class NestedType>
class RepeatedMessageConverter;
}
}
namespace google_apis {
class AboutResource {
public:
AboutResource();
~AboutResource();
static void RegisterJSONConverter(
base::JSONValueConverter<AboutResource>* converter);
static std::unique_ptr<AboutResource> CreateFrom(const base::Value& value);
int64_t largest_change_id() const { return largest_change_id_; }
int64_t quota_bytes_total() const { return quota_bytes_total_; }
int64_t quota_bytes_used_aggregate() const {
return quota_bytes_used_aggregate_;
}
const std::string& root_folder_id() const { return root_folder_id_; }
void set_largest_change_id(int64_t largest_change_id) {
largest_change_id_ = largest_change_id;
}
void set_quota_bytes_total(int64_t quota_bytes_total) {
quota_bytes_total_ = quota_bytes_total;
}
void set_quota_bytes_used_aggregate(int64_t quota_bytes_used_aggregate) {
quota_bytes_used_aggregate_ = quota_bytes_used_aggregate;
}
void set_root_folder_id(const std::string& root_folder_id) {
root_folder_id_ = root_folder_id;
}
private:
friend class DriveAPIParserTest;
FRIEND_TEST_ALL_PREFIXES(DriveAPIParserTest, AboutResourceParser);
bool Parse(const base::Value& value);
int64_t largest_change_id_;
int64_t quota_bytes_total_;
int64_t quota_bytes_used_aggregate_;
std::string root_folder_id_;
};
class TeamDriveCapabilities {
public:
TeamDriveCapabilities();
TeamDriveCapabilities(const TeamDriveCapabilities& src);
~TeamDriveCapabilities();
static void RegisterJSONConverter(
base::JSONValueConverter<TeamDriveCapabilities>* converter);
static std::unique_ptr<TeamDriveCapabilities>
CreateFrom(const base::Value& value);
bool can_add_children() const { return can_add_children_; }
void set_can_add_children(bool can_add_children) {
can_add_children_ = can_add_children;
}
bool can_comment() const { return can_comment_; }
void set_can_comment(bool can_comment) { can_comment_ = can_comment; }
bool can_copy() const { return can_copy_; }
void set_can_copy(bool can_copy) { can_copy_ = can_copy; }
bool can_delete_team_drive() const { return can_delete_team_drive_; }
void set_can_delete_team_drive(bool can_delete_team_drive) {
can_delete_team_drive_ = can_delete_team_drive;
}
bool can_download() const { return can_download_; }
void set_can_download(bool can_download) { can_download_ = can_download; }
bool can_edit() const { return can_edit_; }
void set_can_edit(bool can_edit) { can_edit_ = can_edit; }
bool can_list_children() const { return can_list_children_; }
void set_can_list_children(bool can_list_children) {
can_list_children_ = can_list_children;
}
bool can_manage_members() const { return can_manage_members_; }
void set_can_manage_members(bool can_manage_members) {
can_manage_members_ = can_manage_members;
}
bool can_read_revisions() const { return can_read_revisions_; }
void set_can_read_revisions(bool can_read_revisions) {
can_read_revisions_ = can_read_revisions;
}
bool can_remove_children() const { return can_remove_children_; }
void set_can_remove_children(bool can_remove_children) {
can_remove_children_ = can_remove_children;
}
bool can_rename() const { return can_rename_; }
void set_can_rename(bool can_rename) { can_rename_ = can_rename; }
bool can_rename_team_drive() const { return can_rename_team_drive_; }
void set_can_rename_team_drive(bool can_rename_team_drive) {
can_rename_team_drive_ = can_rename_team_drive;
}
bool can_share() const { return can_share_; }
void set_can_share(bool can_share) { can_share_ = can_share; }
private:
bool can_add_children_;
bool can_comment_;
bool can_copy_;
bool can_delete_team_drive_;
bool can_download_;
bool can_edit_;
bool can_list_children_;
bool can_manage_members_;
bool can_read_revisions_;
bool can_remove_children_;
bool can_rename_;
bool can_rename_team_drive_;
bool can_share_;
};
class TeamDriveResource {
public:
TeamDriveResource();
~TeamDriveResource();
static void RegisterJSONConverter(
base::JSONValueConverter<TeamDriveResource>* converter);
static std::unique_ptr<TeamDriveResource>
CreateFrom(const base::Value& value);
const std::string& id() const { return id_; }
void set_id(const std::string& id) { id_ = id; }
const std::string& name() const { return name_; }
void set_name(const std::string& name) { name_ = name; }
const TeamDriveCapabilities& capabilities() const { return capabilities_; }
void set_capabilities(const TeamDriveCapabilities& capabilities) {
capabilities_ = capabilities;
}
private:
friend class DriveAPIParserTest;
FRIEND_TEST_ALL_PREFIXES(DriveAPIParserTest, TeamDriveResourceParser);
bool Parse(const base::Value& value);
std::string id_;
std::string name_;
TeamDriveCapabilities capabilities_;
};
class TeamDriveList {
public:
TeamDriveList();
TeamDriveList(const TeamDriveList&) = delete;
TeamDriveList& operator=(const TeamDriveList&) = delete;
~TeamDriveList();
static void RegisterJSONConverter(
base::JSONValueConverter<TeamDriveList>* converter);
static bool HasTeamDriveListKind(const base::Value& value);
static std::unique_ptr<TeamDriveList> CreateFrom(const base::Value& value);
const std::string& next_page_token() const { return next_page_token_; }
void set_next_page_token(const std::string& next_page_token) {
this->next_page_token_ = next_page_token;
}
const std::vector<std::unique_ptr<TeamDriveResource>>& items() const {
return items_;
}
std::vector<std::unique_ptr<TeamDriveResource>>* mutable_items() {
return &items_;
}
private:
friend class DriveAPIParserTest;
FRIEND_TEST_ALL_PREFIXES(DriveAPIParserTest, TeamDriveListParser);
bool Parse(const base::Value& value);
std::string next_page_token_;
std::vector<std::unique_ptr<TeamDriveResource>> items_;
};
class ParentReference {
public:
ParentReference();
~ParentReference();
static void RegisterJSONConverter(
base::JSONValueConverter<ParentReference>* converter);
static std::unique_ptr<ParentReference> CreateFrom(const base::Value& value);
const std::string& file_id() const { return file_id_; }
void set_file_id(const std::string& file_id) { file_id_ = file_id; }
private:
bool Parse(const base::Value& value);
std::string file_id_;
};
class FileLabels {
public:
FileLabels();
~FileLabels();
static void RegisterJSONConverter(
base::JSONValueConverter<FileLabels>* converter);
static std::unique_ptr<FileLabels> CreateFrom(const base::Value& value);
bool is_trashed() const { return trashed_; }
bool is_starred() const { return starred_; }
void set_trashed(bool trashed) { trashed_ = trashed; }
void set_starred(bool starred) { starred_ = starred; }
private:
friend class FileResource;
bool Parse(const base::Value& value);
bool trashed_;
bool starred_;
};
class ImageMediaMetadata {
public:
ImageMediaMetadata();
~ImageMediaMetadata();
static void RegisterJSONConverter(
base::JSONValueConverter<ImageMediaMetadata>* converter);
static std::unique_ptr<ImageMediaMetadata> CreateFrom(
const base::Value& value);
int width() const { return width_; }
int height() const { return height_; }
int rotation() const { return rotation_; }
void set_width(int width) { width_ = width; }
void set_height(int height) { height_ = height; }
void set_rotation(int rotation) { rotation_ = rotation; }
private:
friend class FileResource;
bool Parse(const base::Value& value);
int width_;
int height_;
int rotation_;
};
class FileResourceCapabilities {
public:
FileResourceCapabilities();
FileResourceCapabilities(const FileResourceCapabilities& src);
~FileResourceCapabilities();
static void RegisterJSONConverter(
base::JSONValueConverter<FileResourceCapabilities>* converter);
static std::unique_ptr<FileResourceCapabilities> CreateFrom(
const base::Value& value);
bool can_add_children() const { return can_add_children_; }
void set_can_add_children(bool can_add_children) {
can_add_children_ = can_add_children;
}
bool can_change_restricted_download() const {
return can_change_restricted_download_;
}
void set_can_change_restricted_download(bool can_change_restricted_download) {
can_change_restricted_download_ = can_change_restricted_download;
}
bool can_comment() const { return can_comment_; }
void set_can_comment(bool can_comment) { can_comment_ = can_comment; }
bool can_copy() const { return can_copy_; }
void set_can_copy(bool can_copy) { can_copy_ = can_copy; }
bool can_delete() const { return can_delete_; }
void set_can_delete(bool can_delete) { can_delete_ = can_delete; }
bool can_download() const { return can_download_; }
void set_can_download(bool can_download) { can_download_ = can_download; }
bool can_edit() const { return can_edit_; }
void set_can_edit(bool can_edit) { can_edit_ = can_edit; }
bool can_list_children() const { return can_list_children_; }
void set_can_list_children(bool can_list_children) {
can_list_children_ = can_list_children;
}
bool can_move_item_into_team_drive() const {
return can_move_item_into_team_drive_;
}
void set_can_move_item_into_team_drive(bool can_move_item_into_team_drive) {
can_move_item_into_team_drive_ = can_move_item_into_team_drive;
}
bool can_move_team_drive_item() const { return can_move_team_drive_item_; }
void set_can_move_team_drive_item(bool can_move_team_drive_item) {
can_move_team_drive_item_ = can_move_team_drive_item;
}
bool can_read_revisions() const { return can_read_revisions_; }
void set_can_read_revisions(bool can_read_revisions) {
can_read_revisions_ = can_read_revisions;
}
bool can_read_team_drive() const { return can_read_team_drive_; }
void set_can_read_team_drive(bool can_read_team_drive) {
can_read_team_drive_ = can_read_team_drive;
}
bool can_remove_children() const { return can_remove_children_; }
void set_can_remove_children(bool can_remove_children) {
can_remove_children_ = can_remove_children;
}
bool can_rename() const { return can_rename_; }
void set_can_rename(bool can_rename) { can_rename_ = can_rename; }
bool can_share() const { return can_share_; }
void set_can_share(bool can_share) { can_share_ = can_share; }
bool can_trash() const { return can_trash_; }
void set_can_trash(bool can_trash) { can_trash_ = can_trash; }
bool can_untrash() const { return can_untrash_; }
void set_can_untrash(bool can_untrash) { can_untrash_ = can_untrash; }
private:
bool can_add_children_;
bool can_change_restricted_download_;
bool can_comment_;
bool can_copy_;
bool can_delete_;
bool can_download_;
bool can_edit_;
bool can_list_children_;
bool can_move_item_into_team_drive_;
bool can_move_team_drive_item_;
bool can_read_revisions_;
bool can_read_team_drive_;
bool can_remove_children_;
bool can_rename_;
bool can_share_;
bool can_trash_;
bool can_untrash_;
};
class FileResource {
public:
struct OpenWithLink {
std::string app_id;
GURL open_url;
};
FileResource();
FileResource(const FileResource& other);
~FileResource();
static void RegisterJSONConverter(
base::JSONValueConverter<FileResource>* converter);
static std::unique_ptr<FileResource> CreateFrom(const base::Value& value);
bool IsDirectory() const;
bool IsHostedDocument() const;
const std::string& file_id() const { return file_id_; }
const std::string& etag() const { return etag_; }
const std::string& title() const { return title_; }
const std::string& mime_type() const { return mime_type_; }
const FileLabels& labels() const { return labels_; }
const ImageMediaMetadata& image_media_metadata() const {
return image_media_metadata_;
}
const base::Time& created_date() const { return created_date_; }
const base::Time& modified_date() const { return modified_date_; }
const base::Time& modified_by_me_date() const { return modified_by_me_date_; }
const base::Time& last_viewed_by_me_date() const {
return last_viewed_by_me_date_;
}
const base::Time& shared_with_me_date() const {
return shared_with_me_date_;
}
bool shared() const { return shared_; }
const std::string& md5_checksum() const { return md5_checksum_; }
int64_t file_size() const { return file_size_; }
const GURL& alternate_link() const { return alternate_link_; }
const GURL& share_link() const { return share_link_; }
const std::vector<ParentReference>& parents() const { return parents_; }
const std::vector<OpenWithLink>& open_with_links() const {
return open_with_links_;
}
void set_file_id(const std::string& file_id) {
file_id_ = file_id;
}
void set_etag(const std::string& etag) {
etag_ = etag;
}
void set_title(const std::string& title) {
title_ = title;
}
void set_mime_type(const std::string& mime_type) {
mime_type_ = mime_type;
}
FileLabels* mutable_labels() {
return &labels_;
}
ImageMediaMetadata* mutable_image_media_metadata() {
return &image_media_metadata_;
}
void set_created_date(const base::Time& created_date) {
created_date_ = created_date;
}
void set_modified_date(const base::Time& modified_date) {
modified_date_ = modified_date;
}
void set_modified_by_me_date(const base::Time& modified_by_me_date) {
modified_by_me_date_ = modified_by_me_date;
}
void set_last_viewed_by_me_date(const base::Time& last_viewed_by_me_date) {
last_viewed_by_me_date_ = last_viewed_by_me_date;
}
void set_shared_with_me_date(const base::Time& shared_with_me_date) {
shared_with_me_date_ = shared_with_me_date;
}
void set_shared(bool shared) {
shared_ = shared;
}
void set_md5_checksum(const std::string& md5_checksum) {
md5_checksum_ = md5_checksum;
}
void set_file_size(int64_t file_size) { file_size_ = file_size; }
void set_alternate_link(const GURL& alternate_link) {
alternate_link_ = alternate_link;
}
void set_share_link(const GURL& share_link) {
share_link_ = share_link;
}
std::vector<ParentReference>* mutable_parents() { return &parents_; }
std::vector<OpenWithLink>* mutable_open_with_links() {
return &open_with_links_;
}
const FileResourceCapabilities& capabilities() const { return capabilities_; }
void set_capabilities(const FileResourceCapabilities& capabilities) {
capabilities_ = capabilities;
}
const std::string& team_drive_id() const { return team_drive_id_; }
void set_team_drive_id(const std::string& team_drive_id) {
team_drive_id_ = team_drive_id;
}
private:
friend class base::internal::RepeatedMessageConverter<FileResource>;
friend class ChangeResource;
friend class FileList;
bool Parse(const base::Value& value);
std::string file_id_;
std::string etag_;
std::string title_;
std::string mime_type_;
FileLabels labels_;
ImageMediaMetadata image_media_metadata_;
base::Time created_date_;
base::Time modified_date_;
base::Time modified_by_me_date_;
base::Time last_viewed_by_me_date_;
base::Time shared_with_me_date_;
bool shared_;
std::string md5_checksum_;
int64_t file_size_;
GURL alternate_link_;
GURL share_link_;
std::vector<ParentReference> parents_;
std::vector<OpenWithLink> open_with_links_;
FileResourceCapabilities capabilities_;
std::string team_drive_id_;
};
class FileList {
public:
FileList();
FileList(const FileList&) = delete;
FileList& operator=(const FileList&) = delete;
~FileList();
static void RegisterJSONConverter(
base::JSONValueConverter<FileList>* converter);
static bool HasFileListKind(const base::Value& value);
static std::unique_ptr<FileList> CreateFrom(const base::Value& value);
const GURL& next_link() const { return next_link_; }
const std::vector<std::unique_ptr<FileResource>>& items() const {
return items_;
}
std::vector<std::unique_ptr<FileResource>>* mutable_items() {
return &items_;
}
void set_next_link(const GURL& next_link) {
next_link_ = next_link;
}
private:
friend class DriveAPIParserTest;
FRIEND_TEST_ALL_PREFIXES(DriveAPIParserTest, FileListParser);
bool Parse(const base::Value& value);
GURL next_link_;
std::vector<std::unique_ptr<FileResource>> items_;
};
class ChangeResource {
public:
enum ChangeType {
UNKNOWN,
FILE,
TEAM_DRIVE,
};
ChangeResource();
ChangeResource(const ChangeResource&) = delete;
ChangeResource& operator=(const ChangeResource&) = delete;
~ChangeResource();
static void RegisterJSONConverter(
base::JSONValueConverter<ChangeResource>* converter);
static std::unique_ptr<ChangeResource> CreateFrom(const base::Value& value);
int64_t change_id() const { return change_id_; }
ChangeType type() const { return type_; }
const std::string& file_id() const {
DCHECK_EQ(FILE, type_);
return file_id_;
}
bool is_deleted() const { return deleted_; }
const FileResource* file() const {
DCHECK_EQ(FILE, type_);
return file_.get();
}
FileResource* mutable_file() {
DCHECK_EQ(FILE, type_);
return file_.get();
}
const TeamDriveResource* team_drive() const {
DCHECK_EQ(TEAM_DRIVE, type_);
return team_drive_.get();
}
TeamDriveResource* mutable_team_drive() {
DCHECK_EQ(TEAM_DRIVE, type_);
return team_drive_.get();
}
const std::string& team_drive_id() const {
DCHECK_EQ(TEAM_DRIVE, type_);
return team_drive_id_;
}
const base::Time& modification_date() const { return modification_date_; }
void set_change_id(int64_t change_id) { change_id_ = change_id; }
void set_type(ChangeType type) { type_ = type; }
void set_file_id(const std::string& file_id) {
file_id_ = file_id;
}
void set_deleted(bool deleted) {
deleted_ = deleted;
}
void set_file(std::unique_ptr<FileResource> file) { file_ = std::move(file); }
void set_team_drive(std::unique_ptr<TeamDriveResource> team_drive) {
team_drive_ = std::move(team_drive);
}
void set_team_drive_id(const std::string& team_drive_id) {
team_drive_id_ = team_drive_id;
}
void set_modification_date(const base::Time& modification_date) {
modification_date_ = modification_date;
}
private:
friend class base::internal::RepeatedMessageConverter<ChangeResource>;
friend class ChangeList;
bool Parse(const base::Value& value);
static bool GetType(std::string_view type_name,
ChangeResource::ChangeType* result);
int64_t change_id_;
ChangeType type_;
std::string file_id_;
bool deleted_;
std::unique_ptr<FileResource> file_;
base::Time modification_date_;
std::string team_drive_id_;
std::unique_ptr<TeamDriveResource> team_drive_;
};
class ChangeList {
public:
ChangeList();
ChangeList(const ChangeList&) = delete;
ChangeList& operator=(const ChangeList&) = delete;
~ChangeList();
static void RegisterJSONConverter(
base::JSONValueConverter<ChangeList>* converter);
static bool HasChangeListKind(const base::Value& value);
static std::unique_ptr<ChangeList> CreateFrom(const base::Value& value);
const GURL& next_link() const { return next_link_; }
int64_t largest_change_id() const { return largest_change_id_; }
const std::string& new_start_page_token() const {
return new_start_page_token_;
}
const std::vector<std::unique_ptr<ChangeResource>>& items() const {
return items_;
}
std::vector<std::unique_ptr<ChangeResource>>* mutable_items() {
return &items_;
}
void set_next_link(const GURL& next_link) {
next_link_ = next_link;
}
void set_largest_change_id(int64_t largest_change_id) {
largest_change_id_ = largest_change_id;
}
void set_new_start_page_token(const std::string& new_start_page_token) {
new_start_page_token_ = new_start_page_token;
}
private:
friend class DriveAPIParserTest;
FRIEND_TEST_ALL_PREFIXES(DriveAPIParserTest, ChangeListParser);
bool Parse(const base::Value& value);
GURL next_link_;
int64_t largest_change_id_;
std::string new_start_page_token_;
std::vector<std::unique_ptr<ChangeResource>> items_;
};
class StartPageToken {
public:
StartPageToken();
~StartPageToken();
static void RegisterJSONConverter(
base::JSONValueConverter<StartPageToken>* converter);
static std::unique_ptr<StartPageToken> CreateFrom(const base::Value& value);
const std::string& start_page_token() const { return start_page_token_; }
void set_start_page_token(const std::string& token) {
start_page_token_ = token;
}
private:
bool Parse(const base::Value& value);
std::string start_page_token_;
};
}
#endif