#ifndef CHROME_BROWSER_BOOKMARKS_BOOKMARK_PARENT_FOLDER_H_
#define CHROME_BROWSER_BOOKMARKS_BOOKMARK_PARENT_FOLDER_H_
#include <optional>
#include <variant>
#include "base/memory/raw_ptr.h"
namespace bookmarks {
class BookmarkNode;
}
struct BookmarkParentFolder {
enum class PermanentFolderType {
kBookmarkBarNode,
kOtherNode,
kMobileNode,
kManagedNode
};
static BookmarkParentFolder BookmarkBarFolder();
static BookmarkParentFolder OtherFolder();
static BookmarkParentFolder MobileFolder();
static BookmarkParentFolder ManagedFolder();
static BookmarkParentFolder FromFolderNode(
const bookmarks::BookmarkNode* node);
~BookmarkParentFolder();
BookmarkParentFolder(const BookmarkParentFolder& other);
BookmarkParentFolder& operator=(const BookmarkParentFolder& other);
friend bool operator==(const BookmarkParentFolder&,
const BookmarkParentFolder&) = default;
friend auto operator<=>(const BookmarkParentFolder&,
const BookmarkParentFolder&) = default;
bool HoldsNonPermanentFolder() const;
std::optional<PermanentFolderType> as_permanent_folder() const;
const bookmarks::BookmarkNode* as_non_permanent_folder() const;
bool HasDirectChildNode(const bookmarks::BookmarkNode* node) const;
bool HasAncestor(const BookmarkParentFolder& ancestor) const;
private:
explicit BookmarkParentFolder(
std::variant<PermanentFolderType, raw_ptr<const bookmarks::BookmarkNode>>
parent);
std::variant<PermanentFolderType, raw_ptr<const bookmarks::BookmarkNode>>
bookmark_;
};
#endif