1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
/*
* Copyright © 2014 Canonical Ltd.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License version 3,
* as published by the Free Software Foundation.
*
* 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Authored by: Pete Woods <pete.woods@canonical.com>
*/
#ifndef CORE_NET_URI_H_
#define CORE_NET_URI_H_
#include <string>
#include <vector>
#include <core/net/visibility.h>
namespace core
{
namespace net
{
/**
* @brief The Uri class encapsulates the components of a URI
*/
struct Uri
{
typedef std::string Host;
typedef std::vector<std::string> Path;
typedef std::vector<std::pair<std::string, std::string>> QueryParameters;
/**
* @brief The host is the first part of the URI, including the protocol
*
* e.g.
* \code{.cpp}
* "http://www.ubuntu.com"
* \endcode
*/
Host host;
/**
* @brief the path components
*
* e.g.
* \code{.cpp}
* {"api", "v3", "search"}
* \endcode
*/
Path path;
/**
* @brief The CGI query parameters as ordered key-value pairs
*
* e.g.
* \code{.cpp}
* {{"key1", "value1"}, {"key2", "value2"}}
* \endcode
*/
QueryParameters query_parameters;
};
/**
* @brief Build a URI from its components
*
* e.g.
* \code{.cpp}
* std::string query = "banana";
* auto uri = core::net::make_uri("https://api.mydomain.com", {"api", "v3", "search"}, {{"query", query}});
* \endcode
*
* When converted to a std::string with core::net::http::client::uri_to_string()
* the endpoint and parameters will be URL-escaped.
*/
CORE_NET_DLL_PUBLIC
Uri make_uri (const Uri::Host& host, const Uri::Path& path = Uri::Path(),
const Uri::QueryParameters& query_parameters = Uri::QueryParameters());
}
}
#endif // CORE_NET_URI_H_
|