]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/beast/http/impl/verb.ipp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / beast / http / impl / verb.ipp
CommitLineData
b32b8144 1//
92f5a8d4 2// Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
b32b8144
FG
3//
4// Distributed under the Boost Software License, Version 1.0. (See accompanying
5// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6//
7// Official repository: https://github.com/boostorg/beast
8//
9
10#ifndef BOOST_BEAST_HTTP_IMPL_VERB_IPP
11#define BOOST_BEAST_HTTP_IMPL_VERB_IPP
12
92f5a8d4 13#include <boost/beast/http/verb.hpp>
b32b8144
FG
14#include <boost/throw_exception.hpp>
15#include <stdexcept>
16
17namespace boost {
18namespace beast {
19namespace http {
20
b32b8144 21string_view
92f5a8d4 22to_string(verb v)
b32b8144 23{
92f5a8d4 24 using namespace beast::detail::string_literals;
b32b8144
FG
25 switch(v)
26 {
92f5a8d4
TL
27 case verb::delete_: return "DELETE"_sv;
28 case verb::get: return "GET"_sv;
29 case verb::head: return "HEAD"_sv;
30 case verb::post: return "POST"_sv;
31 case verb::put: return "PUT"_sv;
32 case verb::connect: return "CONNECT"_sv;
33 case verb::options: return "OPTIONS"_sv;
34 case verb::trace: return "TRACE"_sv;
35
36 case verb::copy: return "COPY"_sv;
37 case verb::lock: return "LOCK"_sv;
38 case verb::mkcol: return "MKCOL"_sv;
39 case verb::move: return "MOVE"_sv;
40 case verb::propfind: return "PROPFIND"_sv;
41 case verb::proppatch: return "PROPPATCH"_sv;
42 case verb::search: return "SEARCH"_sv;
43 case verb::unlock: return "UNLOCK"_sv;
44 case verb::bind: return "BIND"_sv;
45 case verb::rebind: return "REBIND"_sv;
46 case verb::unbind: return "UNBIND"_sv;
47 case verb::acl: return "ACL"_sv;
48
49 case verb::report: return "REPORT"_sv;
50 case verb::mkactivity: return "MKACTIVITY"_sv;
51 case verb::checkout: return "CHECKOUT"_sv;
52 case verb::merge: return "MERGE"_sv;
53
54 case verb::msearch: return "M-SEARCH"_sv;
55 case verb::notify: return "NOTIFY"_sv;
56 case verb::subscribe: return "SUBSCRIBE"_sv;
57 case verb::unsubscribe: return "UNSUBSCRIBE"_sv;
58
59 case verb::patch: return "PATCH"_sv;
60 case verb::purge: return "PURGE"_sv;
61
62 case verb::mkcalendar: return "MKCALENDAR"_sv;
63
64 case verb::link: return "LINK"_sv;
65 case verb::unlink: return "UNLINK"_sv;
66
b32b8144 67 case verb::unknown:
92f5a8d4 68 return "<unknown>"_sv;
b32b8144
FG
69 }
70
71 BOOST_THROW_EXCEPTION(std::invalid_argument{"unknown verb"});
72}
73
b32b8144
FG
74verb
75string_to_verb(string_view v)
76{
77/*
78 ACL
79 BIND
80 CHECKOUT
81 CONNECT
82 COPY
83 DELETE
84 GET
85 HEAD
86 LINK
87 LOCK
88 M-SEARCH
89 MERGE
90 MKACTIVITY
91 MKCALENDAR
92 MKCOL
93 MOVE
94 NOTIFY
95 OPTIONS
96 PATCH
97 POST
98 PROPFIND
99 PROPPATCH
100 PURGE
101 PUT
102 REBIND
103 REPORT
104 SEARCH
105 SUBSCRIBE
106 TRACE
107 UNBIND
108 UNLINK
109 UNLOCK
110 UNSUBSCRIBE
111*/
92f5a8d4 112 using namespace beast::detail::string_literals;
b32b8144
FG
113 if(v.size() < 3)
114 return verb::unknown;
b32b8144
FG
115 auto c = v[0];
116 v.remove_prefix(1);
117 switch(c)
118 {
119 case 'A':
92f5a8d4 120 if(v == "CL"_sv)
b32b8144
FG
121 return verb::acl;
122 break;
123
124 case 'B':
92f5a8d4 125 if(v == "IND"_sv)
b32b8144
FG
126 return verb::bind;
127 break;
128
129 case 'C':
130 c = v[0];
131 v.remove_prefix(1);
132 switch(c)
133 {
134 case 'H':
92f5a8d4 135 if(v == "ECKOUT"_sv)
b32b8144
FG
136 return verb::checkout;
137 break;
138
139 case 'O':
92f5a8d4 140 if(v == "NNECT"_sv)
b32b8144 141 return verb::connect;
92f5a8d4 142 if(v == "PY"_sv)
b32b8144 143 return verb::copy;
11fdf7f2 144 BOOST_FALLTHROUGH;
b32b8144
FG
145
146 default:
147 break;
148 }
149 break;
150
151 case 'D':
92f5a8d4 152 if(v == "ELETE"_sv)
b32b8144
FG
153 return verb::delete_;
154 break;
155
156 case 'G':
92f5a8d4 157 if(v == "ET"_sv)
b32b8144
FG
158 return verb::get;
159 break;
160
161 case 'H':
92f5a8d4 162 if(v == "EAD"_sv)
b32b8144
FG
163 return verb::head;
164 break;
165
166 case 'L':
92f5a8d4 167 if(v == "INK"_sv)
b32b8144 168 return verb::link;
92f5a8d4 169 if(v == "OCK"_sv)
b32b8144
FG
170 return verb::lock;
171 break;
172
173 case 'M':
174 c = v[0];
175 v.remove_prefix(1);
176 switch(c)
177 {
178 case '-':
92f5a8d4 179 if(v == "SEARCH"_sv)
b32b8144
FG
180 return verb::msearch;
181 break;
182
183 case 'E':
92f5a8d4 184 if(v == "RGE"_sv)
b32b8144
FG
185 return verb::merge;
186 break;
187
188 case 'K':
92f5a8d4 189 if(v == "ACTIVITY"_sv)
b32b8144
FG
190 return verb::mkactivity;
191 if(v[0] == 'C')
192 {
193 v.remove_prefix(1);
92f5a8d4 194 if(v == "ALENDAR"_sv)
b32b8144 195 return verb::mkcalendar;
92f5a8d4 196 if(v == "OL"_sv)
b32b8144
FG
197 return verb::mkcol;
198 break;
199 }
200 break;
92f5a8d4 201
b32b8144 202 case 'O':
92f5a8d4 203 if(v == "VE"_sv)
b32b8144 204 return verb::move;
11fdf7f2 205 BOOST_FALLTHROUGH;
b32b8144
FG
206
207 default:
208 break;
209 }
210 break;
211
212 case 'N':
92f5a8d4 213 if(v == "OTIFY"_sv)
b32b8144
FG
214 return verb::notify;
215 break;
216
217 case 'O':
92f5a8d4 218 if(v == "PTIONS"_sv)
b32b8144
FG
219 return verb::options;
220 break;
221
222 case 'P':
223 c = v[0];
224 v.remove_prefix(1);
225 switch(c)
226 {
227 case 'A':
92f5a8d4 228 if(v == "TCH"_sv)
b32b8144
FG
229 return verb::patch;
230 break;
231
232 case 'O':
92f5a8d4 233 if(v == "ST"_sv)
b32b8144
FG
234 return verb::post;
235 break;
236
237 case 'R':
92f5a8d4 238 if(v == "OPFIND"_sv)
b32b8144 239 return verb::propfind;
92f5a8d4 240 if(v == "OPPATCH"_sv)
b32b8144
FG
241 return verb::proppatch;
242 break;
243
244 case 'U':
92f5a8d4 245 if(v == "RGE"_sv)
b32b8144 246 return verb::purge;
92f5a8d4 247 if(v == "T"_sv)
b32b8144 248 return verb::put;
11fdf7f2 249 BOOST_FALLTHROUGH;
b32b8144
FG
250
251 default:
252 break;
253 }
254 break;
255
256 case 'R':
257 if(v[0] != 'E')
258 break;
259 v.remove_prefix(1);
92f5a8d4 260 if(v == "BIND"_sv)
b32b8144 261 return verb::rebind;
92f5a8d4 262 if(v == "PORT"_sv)
b32b8144
FG
263 return verb::report;
264 break;
265
266 case 'S':
92f5a8d4 267 if(v == "EARCH"_sv)
b32b8144 268 return verb::search;
92f5a8d4 269 if(v == "UBSCRIBE"_sv)
b32b8144
FG
270 return verb::subscribe;
271 break;
272
273 case 'T':
92f5a8d4 274 if(v == "RACE"_sv)
b32b8144
FG
275 return verb::trace;
276 break;
277
278 case 'U':
279 if(v[0] != 'N')
280 break;
281 v.remove_prefix(1);
92f5a8d4 282 if(v == "BIND"_sv)
b32b8144 283 return verb::unbind;
92f5a8d4 284 if(v == "LINK"_sv)
b32b8144 285 return verb::unlink;
92f5a8d4 286 if(v == "LOCK"_sv)
b32b8144 287 return verb::unlock;
92f5a8d4 288 if(v == "SUBSCRIBE"_sv)
b32b8144
FG
289 return verb::unsubscribe;
290 break;
291
292 default:
293 break;
294 }
295
296 return verb::unknown;
297}
298
b32b8144
FG
299} // http
300} // beast
301} // boost
302
303#endif