userver
C++ Async Framework
Loading...
Searching...
No Matches
content_type.hpp
Go to the documentation of this file.
1
#
pragma
once
2
3
/// @file userver/http/content_type.hpp
4
/// @brief @copybrief http::ContentType
5
6
#
include
<
iosfwd
>
7
#
include
<
stdexcept
>
8
#
include
<
string
>
9
#
include
<
string_view
>
10
11
#
include
<
userver
/
utils
/
str_icase
.
hpp
>
12
13
USERVER_NAMESPACE_BEGIN
14
15
/// HTTP helpers
16
namespace
http {
17
18
/// @brief Content-Type parsing error
19
class
MalformedContentType
:
public
std::runtime_error {
20
using
std::runtime_error::runtime_error;
21
};
22
23
/// @ingroup userver_universal userver_containers
24
///
25
/// @brief Content-Type representation
26
class
ContentType
{
27
public
:
28
/// Constructor from a single content-type/media-range header value
29
/// as per RFC7231.
30
/// @{
31
/* implicit */
ContentType
(
std
::
string_view
);
32
/* implicit */
ContentType(
const
std::string&);
33
/* implicit */
ContentType(
const
char
*);
34
/// @}
35
36
/// Media type (application/json).
37
std::string
MediaType
()
const
;
38
39
/// "type" token of media type (application).
40
const
std::string&
TypeToken
()
const
;
41
42
/// "subtype" token of media type (json).
43
const
std::string&
SubtypeToken
()
const
;
44
45
/// Whether the "charset" option was explicitly specified.
46
bool
HasExplicitCharset
()
const
;
47
48
/// Charset (utf-8).
49
const
std::string&
Charset
()
const
;
50
51
/// Value of "q" parameter in range 0--1000.
52
int
Quality
()
const
;
53
54
/// Whether this media range accepts specified content type.
55
/// Differs from equality comparison in wildcard support.
56
bool
DoesAccept
(
const
ContentType
&)
const
;
57
58
/// Builds a string representation of content-type/media-range
59
std::string
ToString
()
const
;
60
61
private
:
62
std::string type_;
63
std::string subtype_;
64
std::string charset_;
65
int
quality_;
66
};
67
68
bool
operator==(
const
ContentType
&,
const
ContentType
&);
69
bool
operator!=(
const
ContentType
&,
const
ContentType
&);
70
71
/// Weak ordering for Accept media-ranges checking.
72
/// Positions less specific types before more specific, so that the most
73
/// specific type can be matched first.
74
bool
operator
<(
const
ContentType
&,
const
ContentType
&);
75
76
class
ContentTypeHash
{
77
public
:
78
size_t operator()(
const
ContentType&)
const
;
79
80
private
:
81
utils
::
StrIcaseHash
str_hasher_;
82
};
83
84
std::ostream& operator<<(std::ostream&,
const
ContentType
&);
85
86
namespace
content_type {
87
88
extern
const
ContentType
kApplicationOctetStream;
89
extern
const
ContentType
kApplicationJson;
90
extern
const
ContentType
kTextPlain;
91
92
}
// namespace content_type
93
}
// namespace http
94
95
USERVER_NAMESPACE_END
userver
http
content_type.hpp
Generated on Wed Oct 4 2023 12:19:21 for userver by
Doxygen
1.9.8