mastodonpp/include/api.hpp
tastytea 571206c9f4
All checks were successful
continuous-integration/drone/push Build is passing
Only construct 1 API per Connection.
2020-01-05 15:20:59 +01:00

265 lines
5.6 KiB
C++

/* This file is part of mastodonpp.
* Copyright © 2020 tastytea <tastytea@tastytea.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef MASTODONPP_API_HPP
#define MASTODONPP_API_HPP
#include <map>
#include <string_view>
#include <variant>
namespace mastodonpp
{
using std::map;
using std::string_view;
using std::variant;
/*!
* @brief Holds %API endpoints.
*
* Supported %API endpoints: Mastodon 3.0.
*
* @since 0.1.0
*
* @headerfile api.hpp mastodonpp/api.hpp
*/
class API
{
public:
/*!
* @brief An enumeration of all v1 %API endpoints.
*
* The original `/` are substituted with `_`.
*
* @since 0.1.0
*/
enum class v1
{
apps,
apps_verify_credentials,
accounts,
accounts_verify_credentials,
accounts_update_credentials,
accounts_id,
accounts_id_statuses,
accounts_id_followers,
accounts_id_following,
accounts_id_lists,
accounts_id_identity_proofs,
accounts_id_follow,
accounts_id_unfollow,
accounts_id_block,
accounts_id_unblock,
accounts_id_mute,
accounts_id_unmute,
accounts_id_pin,
accounts_id_unpin,
accounts_relationships,
accounts_search,
bookmarks,
favourites,
mutes,
blocks,
domain_blocks,
filters,
filters_id,
reports,
follow_requests,
follow_requests_id_authorize,
follow_requests_id_reject,
endorsements,
featured_tags,
featured_tags_id,
featured_tags_suggestions,
preferences,
suggestions,
suggestions_account_id,
statuses,
statuses_id,
statuses_id_context,
statuses_id_reblogged_by,
statuses_id_favourited_by,
statuses_id_favourite,
statuses_id_unfavourite,
statuses_id_reblog,
statuses_id_unreblog,
statuses_id_bookmark,
statuses_id_unbookmark,
statuses_id_mute,
statuses_id_unmute,
statuses_id_pin,
statuses_id_unpin,
media,
media_id,
polls_id,
polls_id_votes,
scheduled_statuses,
scheduled_statuses_id,
timelines_public,
timelines_tag_hashtag,
timelines_home,
timelines_list_list_id,
conversations,
conversations_id,
conversations_id_read,
lists,
lists_id,
lists_id_accounts,
markers,
streaming_health,
streaming_user,
streaming_public,
streaming_public_local,
streaming_hashtag,
streaming_hashtag_local,
streaming_list,
streaming_direct,
notifications,
notifications_id,
notifications_clear,
notifications_id_dismiss,
push_subscription,
instance,
instance_peers,
instance_activity,
trends,
directory,
custom_emojis,
admin_accounts,
admin_accounts_id,
admin_accounts_account_id_action,
admin_accounts_id_approve,
admin_accounts_id_reject,
admin_accounts_id_enable,
admin_accounts_id_unsilence,
admin_accounts_id_unsuspend,
admin_reports,
admin_reports_id,
admin_reports_id_assign_to_self,
admin_reports_id_unassign,
admin_reports_id_resolve,
admin_reports_id_reopen
};
/*!
* @brief An enumeration of all v2 %API endpoints.
*
* The original `/` are substituted with `_`.
*
* @since 0.1.0
*/
enum class v2
{
search
};
/*!
* @brief An enumeration of all oauth %API endpoints.
*
* The original `/` are substituted with `_`.
*
* @since 0.1.0
*/
enum class oauth
{
authorize,
token,
revoke
};
/*!
* @brief An enumeration of all other %API endpoints.
*
* These endpoints are directly under `/api/`.
*
* The original `/` are substituted with `_`.
*
* @since 0.1.0
*/
enum class other
{
proofs,
oembed
};
/*!
* @brief Type for endpoints. Can be API::v1, API::v2, API::oauth or
* API::other.
*
* @since 0.1.0
*/
using endpoint_type = variant<v1,v2,oauth,other>;
/*!
* @brief Constructs an API object. You should never need this.
*
* This constructor exists to hide away the class members, which are used
* internally.
*
* @since 0.1.0
*/
explicit API();
/*!
* @brief Convert #endpoint_type to `std::string_view`.
*
* @since 0.1.0
*/
[[nodiscard]]
inline string_view endpoint_to_string_view(const endpoint_type &endpoint)
const
{
return _endpoint_map.at(endpoint).data();
}
private:
const map<endpoint_type,string_view> _endpoint_map;
};
} // namespace mastodonpp
#endif // MASTODONPP_API_HPP