1 /*
2 // Copyright (c) 2018 Intel Corporation
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //      http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 */
16 #pragma once
17 
18 #include "http_response.hpp"
19 
20 #include <boost/url/url_view_base.hpp>
21 #include <nlohmann/json.hpp>
22 
23 #include <cstdint>
24 #include <source_location>
25 #include <string>
26 #include <string_view>
27 
28 // IWYU pragma: no_forward_declare crow::Response
29 
30 namespace redfish
31 {
32 
33 namespace messages
34 {
35 
36 constexpr const char* messageVersionPrefix = "Base.1.11.0.";
37 constexpr const char* messageAnnotation = "@Message.ExtendedInfo";
38 
39 /**
40  * @brief Moves all error messages from the |source| JSON to |target|
41  */
42 void moveErrorsToErrorJson(nlohmann::json& target, nlohmann::json& source);
43 
44 /**
45  * @brief Formats ResourceInUse message into JSON
46  * Message body: "The change to the requested resource failed because the
47  * resource is in use or in transition."
48  *
49  *
50  * @returns Message ResourceInUse formatted to JSON */
51 nlohmann::json resourceInUse();
52 
53 void resourceInUse(crow::Response& res);
54 
55 /**
56  * @brief Formats MalformedJSON message into JSON
57  * Message body: "The request body submitted was malformed JSON and could not be
58  * parsed by the receiving service."
59  *
60  *
61  * @returns Message MalformedJSON formatted to JSON */
62 nlohmann::json malformedJSON();
63 
64 void malformedJSON(crow::Response& res);
65 
66 /**
67  * @brief Formats ResourceMissingAtURI message into JSON
68  * Message body: "The resource at the URI <arg1> was not found."
69  *
70  * @param[in] arg1 Parameter of message that will replace %1 in its body.
71  *
72  * @returns Message ResourceMissingAtURI formatted to JSON */
73 nlohmann::json resourceMissingAtURI(const boost::urls::url_view_base& arg1);
74 
75 void resourceMissingAtURI(crow::Response& res,
76                           const boost::urls::url_view_base& arg1);
77 
78 /**
79  * @brief Formats ActionParameterValueFormatError message into JSON
80  * Message body: "The value <arg1> for the parameter <arg2> in the action <arg3>
81  * is of a different format than the parameter can accept."
82  *
83  * @param[in] arg1 Parameter of message that will replace %1 in its body.
84  * @param[in] arg2 Parameter of message that will replace %2 in its body.
85  * @param[in] arg3 Parameter of message that will replace %3 in its body.
86  *
87  * @returns Message ActionParameterValueFormatError formatted to JSON */
88 nlohmann::json actionParameterValueFormatError(
89     const nlohmann::json& arg1, std::string_view arg2, std::string_view arg3);
90 
91 void actionParameterValueFormatError(
92     crow::Response& res, const nlohmann::json& arg1, std::string_view arg2,
93     std::string_view arg3);
94 
95 /**
96  * @brief Formats ActionParameterValueNotInList message into JSON
97  * Message body: "The value <arg1> for the parameter <arg2> in the action <arg3>
98  * is not in the list of acceptable values."
99  *
100  * @param[in] arg1 Parameter of message that will replace %1 in its body.
101  * @param[in] arg2 Parameter of message that will replace %2 in its body.
102  * @param[in] arg3 Parameter of message that will replace %3 in its body.
103  *
104  * @returns Message ActionParameterValueFormatError formatted to JSON */
105 nlohmann::json actionParameterValueNotInList(
106     std::string_view arg1, std::string_view arg2, std::string_view arg3);
107 
108 void actionParameterValueNotInList(crow::Response& res, std::string_view arg1,
109                                    std::string_view arg2,
110                                    std::string_view arg3);
111 
112 /**
113  * @brief Formats InternalError message into JSON
114  * Message body: "The request failed due to an internal service error.  The
115  * service is still operational."
116  *
117  *
118  * @returns Message InternalError formatted to JSON */
119 nlohmann::json internalError();
120 
121 void internalError(crow::Response& res, std::source_location location =
122                                             std::source_location::current());
123 
124 /**
125  * @brief Formats UnrecognizedRequestBody message into JSON
126  * Message body: "The service detected a malformed request body that it was
127  * unable to interpret."
128  *
129  *
130  * @returns Message UnrecognizedRequestBody formatted to JSON */
131 nlohmann::json unrecognizedRequestBody();
132 
133 void unrecognizedRequestBody(crow::Response& res);
134 
135 /**
136  * @brief Formats ResourceAtUriUnauthorized message into JSON
137  * Message body: "While accessing the resource at <arg1>, the service received
138  * an authorization error <arg2>."
139  *
140  * @param[in] arg1 Parameter of message that will replace %1 in its body.
141  * @param[in] arg2 Parameter of message that will replace %2 in its body.
142  *
143  * @returns Message ResourceAtUriUnauthorized formatted to JSON */
144 nlohmann::json resourceAtUriUnauthorized(const boost::urls::url_view_base& arg1,
145                                          std::string_view arg2);
146 
147 void resourceAtUriUnauthorized(crow::Response& res,
148                                const boost::urls::url_view_base& arg1,
149                                std::string_view arg2);
150 
151 /**
152  * @brief Formats ActionParameterUnknown message into JSON
153  * Message body: "The action <arg1> was submitted with the invalid parameter
154  * <arg2>."
155  *
156  * @param[in] arg1 Parameter of message that will replace %1 in its body.
157  * @param[in] arg2 Parameter of message that will replace %2 in its body.
158  *
159  * @returns Message ActionParameterUnknown formatted to JSON */
160 nlohmann::json actionParameterUnknown(std::string_view arg1,
161                                       std::string_view arg2);
162 
163 void actionParameterUnknown(crow::Response& res, std::string_view arg1,
164                             std::string_view arg2);
165 
166 /**
167  * @brief Formats ResourceCannotBeDeleted message into JSON
168  * Message body: "The delete request failed because the resource requested
169  * cannot be deleted."
170  *
171  *
172  * @returns Message ResourceCannotBeDeleted formatted to JSON */
173 nlohmann::json resourceCannotBeDeleted();
174 
175 void resourceCannotBeDeleted(crow::Response& res);
176 
177 /**
178  * @brief Formats PropertyDuplicate message into JSON
179  * Message body: "The property <arg1> was duplicated in the request."
180  *
181  * @param[in] arg1 Parameter of message that will replace %1 in its body.
182  *
183  * @returns Message PropertyDuplicate formatted to JSON */
184 nlohmann::json propertyDuplicate(std::string_view arg1);
185 
186 void propertyDuplicate(crow::Response& res, std::string_view arg1);
187 
188 /**
189  * @brief Formats ServiceTemporarilyUnavailable message into JSON
190  * Message body: "The service is temporarily unavailable.  Retry in <arg1>
191  * seconds."
192  *
193  * @param[in] arg1 Parameter of message that will replace %1 in its body.
194  *
195  * @returns Message ServiceTemporarilyUnavailable formatted to JSON */
196 nlohmann::json serviceTemporarilyUnavailable(std::string_view arg1);
197 
198 void serviceTemporarilyUnavailable(crow::Response& res, std::string_view arg1);
199 
200 /**
201  * @brief Formats ResourceAlreadyExists message into JSON
202  * Message body: "The requested resource of type <arg1> with the property <arg2>
203  * with the value <arg3> already exists."
204  *
205  * @param[in] arg1 Parameter of message that will replace %1 in its body.
206  * @param[in] arg2 Parameter of message that will replace %2 in its body.
207  * @param[in] arg3 Parameter of message that will replace %3 in its body.
208  *
209  * @returns Message ResourceAlreadyExists formatted to JSON */
210 nlohmann::json resourceAlreadyExists(
211     std::string_view arg1, std::string_view arg2, std::string_view arg3);
212 
213 void resourceAlreadyExists(crow::Response& res, std::string_view arg1,
214                            std::string_view arg2, std::string_view arg3);
215 
216 /**
217  * @brief Formats AccountForSessionNoLongerExists message into JSON
218  * Message body: "The account for the current session has been removed, thus the
219  * current session has been removed as well."
220  *
221  *
222  * @returns Message AccountForSessionNoLongerExists formatted to JSON */
223 nlohmann::json accountForSessionNoLongerExists();
224 
225 void accountForSessionNoLongerExists(crow::Response& res);
226 
227 /**
228  * @brief Formats CreateFailedMissingReqProperties message into JSON
229  * Message body: "The create operation failed because the required property
230  * <arg1> was missing from the request."
231  *
232  * @param[in] arg1 Parameter of message that will replace %1 in its body.
233  *
234  * @returns Message CreateFailedMissingReqProperties formatted to JSON */
235 nlohmann::json createFailedMissingReqProperties(std::string_view arg1);
236 
237 void createFailedMissingReqProperties(crow::Response& res,
238                                       std::string_view arg1);
239 
240 /**
241  * @brief Formats PropertyValueFormatError message into JSON
242  * Message body: "The value <arg1> for the property <arg2> is of a different
243  * format than the property can accept."
244  *
245  * @param[in] arg1 Parameter of message that will replace %1 in its body.
246  * @param[in] arg2 Parameter of message that will replace %2 in its body.
247  *
248  * @returns Message PropertyValueFormatError formatted to JSON */
249 nlohmann::json propertyValueFormatError(const nlohmann::json& arg1,
250                                         std::string_view arg2);
251 
252 void propertyValueFormatError(crow::Response& res, const nlohmann::json& arg1,
253                               std::string_view arg2);
254 
255 /**
256  * @brief Formats PropertyValueNotInList message into JSON
257  * Message body: "The value <arg1> for the property <arg2> is not in the list of
258  * acceptable values."
259  *
260  * @param[in] arg1 Parameter of message that will replace %1 in its body.
261  * @param[in] arg2 Parameter of message that will replace %2 in its body.
262  *
263  * @returns Message PropertyValueNotInList formatted to JSON */
264 nlohmann::json propertyValueNotInList(const nlohmann::json& arg1,
265                                       std::string_view arg2);
266 
267 void propertyValueNotInList(crow::Response& res, const nlohmann::json& arg1,
268                             std::string_view arg2);
269 /**
270  * @brief Formats PropertyValueOutOfRange message into JSON
271  * Message body: "The value '%1' for the property %2 is not in the supported
272  * range of acceptable values."
273  *
274  * @param[in] arg1 Parameter of message that will replace %1 in its body.
275  * @param[in] arg2 Parameter of message that will replace %2 in its body.
276  *
277  * @returns Message PropertyValueExternalConflict formatted to JSON */
278 nlohmann::json propertyValueOutOfRange(const nlohmann::json& arg1,
279                                        std::string_view arg2);
280 
281 void propertyValueOutOfRange(crow::Response& res, const nlohmann::json& arg1,
282                              std::string_view arg2);
283 
284 /**
285  * @brief Formats ResourceAtUriInUnknownFormat message into JSON
286  * Message body: "The resource at <arg1> is in a format not recognized by the
287  * service."
288  *
289  * @param[in] arg1 Parameter of message that will replace %1 in its body.
290  *
291  * @returns Message ResourceAtUriInUnknownFormat formatted to JSON */
292 nlohmann::json
293     resourceAtUriInUnknownFormat(const boost::urls::url_view_base& arg1);
294 
295 void resourceAtUriInUnknownFormat(crow::Response& res,
296                                   const boost::urls::url_view_base& arg1);
297 
298 /**
299  * @brief Formats ServiceDisabled message into JSON
300  * Message body: "The operation failed because the service at <arg1> is disabled
301  * and " cannot accept requests."
302  *
303  * @param[in] arg1 Parameter of message that will replace %1 in its body.
304  *
305  * @returns Message ServiceDisabled formatted to JSON */
306 nlohmann::json serviceDisabled(std::string_view arg1);
307 
308 void serviceDisabled(crow::Response& res, std::string_view arg1);
309 
310 /**
311  * @brief Formats ServiceInUnknownState message into JSON
312  * Message body: "The operation failed because the service is in an unknown
313  * state and can no longer take incoming requests."
314  *
315  *
316  * @returns Message ServiceInUnknownState formatted to JSON */
317 nlohmann::json serviceInUnknownState();
318 
319 void serviceInUnknownState(crow::Response& res);
320 
321 /**
322  * @brief Formats EventSubscriptionLimitExceeded message into JSON
323  * Message body: "The event subscription failed due to the number of
324  * simultaneous subscriptions exceeding the limit of the implementation."
325  *
326  *
327  * @returns Message EventSubscriptionLimitExceeded formatted to JSON */
328 nlohmann::json eventSubscriptionLimitExceeded();
329 
330 void eventSubscriptionLimitExceeded(crow::Response& res);
331 
332 /**
333  * @brief Formats ActionParameterMissing message into JSON
334  * Message body: "The action <arg1> requires the parameter <arg2> to be present
335  * in the request body."
336  *
337  * @param[in] arg1 Parameter of message that will replace %1 in its body.
338  * @param[in] arg2 Parameter of message that will replace %2 in its body.
339  *
340  * @returns Message ActionParameterMissing formatted to JSON */
341 nlohmann::json actionParameterMissing(std::string_view arg1,
342                                       std::string_view arg2);
343 
344 void actionParameterMissing(crow::Response& res, std::string_view arg1,
345                             std::string_view arg2);
346 
347 /**
348  * @brief Formats StringValueTooLong message into JSON
349  * Message body: "The string <arg1> exceeds the length limit <arg2>."
350  *
351  * @param[in] arg1 Parameter of message that will replace %1 in its body.
352  * @param[in] arg2 Parameter of message that will replace %2 in its body.
353  *
354  * @returns Message StringValueTooLong formatted to JSON */
355 nlohmann::json stringValueTooLong(std::string_view arg1, int arg2);
356 
357 void stringValueTooLong(crow::Response& res, std::string_view arg1, int arg2);
358 
359 /**
360  * @brief Formats SessionTerminated message into JSON
361  * Message body: "The session was successfully terminated."
362  *
363  *
364  * @returns Message SessionTerminated formatted to JSON */
365 nlohmann::json sessionTerminated();
366 
367 void sessionTerminated(crow::Response& res);
368 
369 /**
370  * @brief Formats SubscriptionTerminated message into JSON
371  * Message body: "The event subscription has been terminated."
372  *
373  *
374  * @returns Message SubscriptionTerminated formatted to JSON */
375 nlohmann::json subscriptionTerminated();
376 
377 void subscriptionTerminated(crow::Response& res);
378 
379 /**
380  * @brief Formats ResourceTypeIncompatible message into JSON
381  * Message body: "The @odata.type of the request body <arg1> is incompatible
382  * with the @odata.type of the resource which is <arg2>."
383  *
384  * @param[in] arg1 Parameter of message that will replace %1 in its body.
385  * @param[in] arg2 Parameter of message that will replace %2 in its body.
386  *
387  * @returns Message ResourceTypeIncompatible formatted to JSON */
388 nlohmann::json resourceTypeIncompatible(std::string_view arg1,
389                                         std::string_view arg2);
390 
391 void resourceTypeIncompatible(crow::Response& res, std::string_view arg1,
392                               std::string_view arg2);
393 
394 /**
395  * @brief Formats ResetRequired message into JSON
396  * Message body: "In order to complete the operation, a component reset is
397  * required with the Reset action URI '<arg1>' and ResetType '<arg2>'."
398  *
399  * @param[in] arg1 Parameter of message that will replace %1 in its body.
400  * @param[in] arg2 Parameter of message that will replace %2 in its body.
401  *
402  * @returns Message ResetRequired formatted to JSON */
403 nlohmann::json resetRequired(const boost::urls::url_view_base& arg1,
404                              std::string_view arg2);
405 
406 void resetRequired(crow::Response& res, const boost::urls::url_view_base& arg1,
407                    std::string_view arg2);
408 
409 /**
410  * @brief Formats ChassisPowerStateOnRequired message into JSON
411  * Message body: "The Chassis with Id '<arg1>' requires to be powered on to
412  * perform this request."
413  *
414  * @param[in] arg1 Parameter of message that will replace %1 in its body.
415  *
416  * @returns Message ChassisPowerStateOnRequired formatted to JSON */
417 nlohmann::json chassisPowerStateOnRequired(std::string_view arg1);
418 
419 void chassisPowerStateOnRequired(crow::Response& res, std::string_view arg1);
420 
421 /**
422  * @brief Formats ChassisPowerStateOffRequired message into JSON
423  * Message body: "The Chassis with Id '<arg1>' requires to be powered off to
424  * perform this request."
425  *
426  * @param[in] arg1 Parameter of message that will replace %1 in its body.
427  *
428  * @returns Message ChassisPowerStateOffRequired formatted to JSON */
429 nlohmann::json chassisPowerStateOffRequired(std::string_view arg1);
430 
431 void chassisPowerStateOffRequired(crow::Response& res, std::string_view arg1);
432 
433 /**
434  * @brief Formats PropertyValueConflict message into JSON
435  * Message body: "The property '<arg1>' could not be written because its value
436  * would conflict with the value of the '<arg2>' property."
437  *
438  * @param[in] arg1 Parameter of message that will replace %1 in its body.
439  * @param[in] arg2 Parameter of message that will replace %2 in its body.
440  *
441  * @returns Message PropertyValueConflict formatted to JSON */
442 nlohmann::json propertyValueConflict(std::string_view arg1,
443                                      std::string_view arg2);
444 
445 void propertyValueConflict(crow::Response& res, std::string_view arg1,
446                            std::string_view arg2);
447 
448 /**
449  * @brief Formats PropertyValueResourceConflict message into JSON
450  * Message body: "The property '%1' with the requested value of '%2' could
451  * not be written because the value conflicts with the state or configuration
452  * of the resource at '%3'."
453  *
454  * @param[in] arg1 Parameter of message that will replace %1 in its body.
455  * @param[in] arg2 Parameter of message that will replace %2 in its body.
456  * @param[in] arg3 Parameter of message that will replace %3 in its body.
457  *
458  * @returns Message PropertyValueResourceConflict to JSON */
459 nlohmann::json propertyValueResourceConflict(
460     std::string_view arg1, const nlohmann::json& arg2,
461     const boost::urls::url_view_base& arg3);
462 
463 void propertyValueResourceConflict(crow::Response& res, std::string_view arg1,
464                                    const nlohmann::json& arg2,
465                                    const boost::urls::url_view_base& arg3);
466 
467 /**
468  * @brief Formats PropertyValueExternalConflict message into JSON
469  * Message body: "The property '%1' with the requested value of '%2' could not
470  * be written because the value is not available due to a configuration
471  * conflict."
472  *
473  * @param[in] arg1 Parameter of message that will replace %1 in its body.
474  * @param[in] arg2 Parameter of message that will replace %2 in its body.
475  *
476  * @returns Message PropertyValueExternalConflict formatted to JSON */
477 nlohmann::json propertyValueExternalConflict(std::string_view arg1,
478                                              const nlohmann::json& arg2);
479 
480 void propertyValueExternalConflict(crow::Response& res, std::string_view arg1,
481                                    const nlohmann::json& arg2);
482 
483 /**
484  * @brief Formats PropertyValueIncorrect message into JSON
485  * Message body: "The property '<arg1>' with the requested value of '<arg2>'
486  * could not be written because the value does not meet the constraints of the
487  * implementation."
488  *
489  * @param[in] arg1 Parameter of message that will replace %1 in its body.
490  * @param[in] arg2 Parameter of message that will replace %2 in its body.
491  *
492  * @returns Message PropertyValueIncorrect formatted to JSON */
493 nlohmann::json propertyValueIncorrect(std::string_view arg1,
494                                       const nlohmann::json& arg2);
495 
496 void propertyValueIncorrect(crow::Response& res, std::string_view arg1,
497                             const nlohmann::json& arg2);
498 
499 /**
500  * @brief Formats ResourceCreationConflict message into JSON
501  * Message body: "The resource could not be created.  The service has a resource
502  * at URI '<arg1>' that conflicts with the creation request."
503  *
504  * @param[in] arg1 Parameter of message that will replace %1 in its body.
505  *
506  * @returns Message ResourceCreationConflict formatted to JSON */
507 nlohmann::json resourceCreationConflict(const boost::urls::url_view_base& arg1);
508 
509 void resourceCreationConflict(crow::Response& res,
510                               const boost::urls::url_view_base& arg1);
511 
512 /**
513  * @brief Formats MaximumErrorsExceeded message into JSON
514  * Message body: "Too many errors have occurred to report them all."
515  *
516  *
517  * @returns Message MaximumErrorsExceeded formatted to JSON */
518 nlohmann::json maximumErrorsExceeded();
519 
520 void maximumErrorsExceeded(crow::Response& res);
521 
522 /**
523  * @brief Formats PreconditionFailed message into JSON
524  * Message body: "The ETag supplied did not match the ETag required to change
525  * this resource."
526  *
527  *
528  * @returns Message PreconditionFailed formatted to JSON */
529 nlohmann::json preconditionFailed();
530 
531 void preconditionFailed(crow::Response& res);
532 
533 /**
534  * @brief Formats PreconditionRequired message into JSON
535  * Message body: "A precondition header or annotation is required to change this
536  * resource."
537  *
538  *
539  * @returns Message PreconditionRequired formatted to JSON */
540 nlohmann::json preconditionRequired();
541 
542 void preconditionRequired(crow::Response& res);
543 
544 /**
545  * @brief Formats OperationFailed message into JSON
546  * Message body: "An error occurred internal to the service as part of the
547  * overall request.  Partial results may have been returned."
548  *
549  *
550  * @returns Message OperationFailed formatted to JSON */
551 nlohmann::json operationFailed();
552 
553 void operationFailed(crow::Response& res);
554 
555 /**
556  * @brief Formats OperationTimeout message into JSON
557  * Message body: "A timeout internal to the service occurred as part of the
558  * request.  Partial results may have been returned."
559  *
560  *
561  * @returns Message OperationTimeout formatted to JSON */
562 nlohmann::json operationTimeout();
563 
564 void operationTimeout(crow::Response& res);
565 
566 /**
567  * @brief Formats PropertyValueTypeError message into JSON
568  * Message body: "The value <arg1> for the property <arg2> is of a different
569  * type than the property can accept."
570  *
571  * @param[in] arg1 Parameter of message that will replace %1 in its body.
572  * @param[in] arg2 Parameter of message that will replace %2 in its body.
573  *
574  * @returns Message PropertyValueTypeError formatted to JSON */
575 nlohmann::json propertyValueTypeError(const nlohmann::json& arg1,
576                                       std::string_view arg2);
577 
578 void propertyValueTypeError(crow::Response& res, const nlohmann::json& arg1,
579                             std::string_view arg2);
580 
581 /**
582  * @brief Formats PropertyValueError message into JSON
583  * Message body: "The value provided for the property <arg1> is not valid."
584  *
585  * @param[in] arg1 Parameter of message that will replace %1 in its body.
586  *
587  * @returns Message PropertyValueTypeError formatted to JSON */
588 nlohmann::json propertyValueError(std::string_view arg1);
589 
590 void propertyValueError(crow::Response& res, std::string_view arg1);
591 
592 /**
593  * @brief Formats ResourceNotFound message into JSON
594  * Message body: "The requested resource of type <arg1> named <arg2> was not
595  * found."
596  *
597  * @param[in] arg1 Parameter of message that will replace %1 in its body.
598  * @param[in] arg2 Parameter of message that will replace %2 in its body.
599  *
600  * @returns Message ResourceNotFound formatted to JSON */
601 nlohmann::json resourceNotFound(std::string_view arg1, std::string_view arg2);
602 
603 void resourceNotFound(crow::Response& res, std::string_view arg1,
604                       std::string_view arg2);
605 
606 /**
607  * @brief Formats CouldNotEstablishConnection message into JSON
608  * Message body: "The service failed to establish a Connection with the URI
609  * <arg1>."
610  *
611  * @param[in] arg1 Parameter of message that will replace %1 in its body.
612  *
613  * @returns Message CouldNotEstablishConnection formatted to JSON */
614 nlohmann::json
615     couldNotEstablishConnection(const boost::urls::url_view_base& arg1);
616 
617 void couldNotEstablishConnection(crow::Response& res,
618                                  const boost::urls::url_view_base& arg1);
619 
620 /**
621  * @brief Formats PropertyNotWritable message into JSON
622  * Message body: "The property <arg1> is a read only property and cannot be
623  * assigned a value."
624  *
625  * @param[in] arg1 Parameter of message that will replace %1 in its body.
626  *
627  * @returns Message PropertyNotWritable formatted to JSON */
628 nlohmann::json propertyNotWritable(std::string_view arg1);
629 
630 void propertyNotWritable(crow::Response& res, std::string_view arg1);
631 
632 /**
633  * @brief Formats QueryParameterValueTypeError message into JSON
634  * Message body: "The value <arg1> for the query parameter <arg2> is of a
635  * different type than the parameter can accept."
636  *
637  * @param[in] arg1 Parameter of message that will replace %1 in its body.
638  * @param[in] arg2 Parameter of message that will replace %2 in its body.
639  *
640  * @returns Message QueryParameterValueTypeError formatted to JSON */
641 nlohmann::json queryParameterValueTypeError(const nlohmann::json& arg1,
642                                             std::string_view arg2);
643 
644 void queryParameterValueTypeError(
645     crow::Response& res, const nlohmann::json& arg1, std::string_view arg2);
646 
647 /**
648  * @brief Formats ServiceShuttingDown message into JSON
649  * Message body: "The operation failed because the service is shutting down and
650  * can no longer take incoming requests."
651  *
652  *
653  * @returns Message ServiceShuttingDown formatted to JSON */
654 nlohmann::json serviceShuttingDown();
655 
656 void serviceShuttingDown(crow::Response& res);
657 
658 /**
659  * @brief Formats ActionParameterDuplicate message into JSON
660  * Message body: "The action <arg1> was submitted with more than one value for
661  * the parameter <arg2>."
662  *
663  * @param[in] arg1 Parameter of message that will replace %1 in its body.
664  * @param[in] arg2 Parameter of message that will replace %2 in its body.
665  *
666  * @returns Message ActionParameterDuplicate formatted to JSON */
667 nlohmann::json actionParameterDuplicate(std::string_view arg1,
668                                         std::string_view arg2);
669 
670 void actionParameterDuplicate(crow::Response& res, std::string_view arg1,
671                               std::string_view arg2);
672 
673 /**
674  * @brief Formats ActionParameterNotSupported message into JSON
675  * Message body: "The parameter <arg1> for the action <arg2> is not supported on
676  * the target resource."
677  *
678  * @param[in] arg1 Parameter of message that will replace %1 in its body.
679  * @param[in] arg2 Parameter of message that will replace %2 in its body.
680  *
681  * @returns Message ActionParameterNotSupported formatted to JSON */
682 nlohmann::json actionParameterNotSupported(std::string_view arg1,
683                                            std::string_view arg2);
684 
685 void actionParameterNotSupported(crow::Response& res, std::string_view arg1,
686                                  std::string_view arg2);
687 
688 /**
689  * @brief Formats SourceDoesNotSupportProtocol message into JSON
690  * Message body: "The other end of the Connection at <arg1> does not support the
691  * specified protocol <arg2>."
692  *
693  * @param[in] arg1 Parameter of message that will replace %1 in its body.
694  * @param[in] arg2 Parameter of message that will replace %2 in its body.
695  *
696  * @returns Message SourceDoesNotSupportProtocol formatted to JSON */
697 nlohmann::json sourceDoesNotSupportProtocol(
698     const boost::urls::url_view_base& arg1, std::string_view arg2);
699 
700 void sourceDoesNotSupportProtocol(crow::Response& res,
701                                   const boost::urls::url_view_base& arg1,
702                                   std::string_view arg2);
703 
704 /**
705  * @brief Formats StrictAccountTypes message into JSON
706  * Message body: Indicates the request failed because a set of `AccountTypes` or
707  * `OEMAccountTypes` was not accepted while `StrictAccountTypes` is set to `true
708  * @param[in] arg1 Parameter of message that will replace %1 in its body.
709  *
710  * @returns Message StrictAccountTypes formatted to JSON */
711 nlohmann::json strictAccountTypes(std::string_view arg1);
712 
713 void strictAccountTypes(crow::Response& res, std::string_view arg1);
714 
715 /**
716  * @brief Formats AccountRemoved message into JSON
717  * Message body: "The account was successfully removed."
718  *
719  *
720  * @returns Message AccountRemoved formatted to JSON */
721 nlohmann::json accountRemoved();
722 
723 void accountRemoved(crow::Response& res);
724 
725 /**
726  * @brief Formats AccessDenied message into JSON
727  * Message body: "While attempting to establish a Connection to <arg1>, the
728  * service denied access."
729  *
730  * @param[in] arg1 Parameter of message that will replace %1 in its body.
731  *
732  * @returns Message AccessDenied formatted to JSON */
733 nlohmann::json accessDenied(const boost::urls::url_view_base& arg1);
734 
735 void accessDenied(crow::Response& res, const boost::urls::url_view_base& arg1);
736 
737 /**
738  * @brief Formats QueryNotSupported message into JSON
739  * Message body: "Querying is not supported by the implementation."
740  *
741  *
742  * @returns Message QueryNotSupported formatted to JSON */
743 nlohmann::json queryNotSupported();
744 
745 void queryNotSupported(crow::Response& res);
746 
747 /**
748  * @brief Formats CreateLimitReachedForResource message into JSON
749  * Message body: "The create operation failed because the resource has reached
750  * the limit of possible resources."
751  *
752  *
753  * @returns Message CreateLimitReachedForResource formatted to JSON */
754 nlohmann::json createLimitReachedForResource();
755 
756 void createLimitReachedForResource(crow::Response& res);
757 
758 /**
759  * @brief Formats GeneralError message into JSON
760  * Message body: "A general error has occurred. See ExtendedInfo for more
761  * information."
762  *
763  *
764  * @returns Message GeneralError formatted to JSON */
765 nlohmann::json generalError();
766 
767 void generalError(crow::Response& res);
768 
769 /**
770  * @brief Formats Success message into JSON
771  * Message body: "Successfully Completed Request"
772  *
773  *
774  * @returns Message Success formatted to JSON */
775 nlohmann::json success();
776 
777 void success(crow::Response& res);
778 
779 /**
780  * @brief Formats Created message into JSON
781  * Message body: "The resource has been created successfully"
782  *
783  *
784  * @returns Message Created formatted to JSON */
785 nlohmann::json created();
786 
787 void created(crow::Response& res);
788 
789 /**
790  * @brief Formats NoOperation message into JSON
791  * Message body: "The request body submitted contain no data to act upon and
792  * no changes to the resource took place."
793  *
794  *
795  * @returns Message NoOperation formatted to JSON */
796 nlohmann::json noOperation();
797 
798 void noOperation(crow::Response& res);
799 
800 /**
801  * @brief Formats PropertyUnknown message into JSON
802  * Message body: "The property <arg1> is not in the list of valid properties for
803  * the resource."
804  *
805  * @param[in] arg1 Parameter of message that will replace %1 in its body.
806  *
807  * @returns Message PropertyUnknown formatted to JSON */
808 nlohmann::json propertyUnknown(std::string_view arg1);
809 
810 void propertyUnknown(crow::Response& res, std::string_view arg1);
811 
812 /**
813  * @brief Formats NoValidSession message into JSON
814  * Message body: "There is no valid session established with the
815  * implementation."
816  *
817  *
818  * @returns Message NoValidSession formatted to JSON */
819 nlohmann::json noValidSession();
820 
821 void noValidSession(crow::Response& res);
822 
823 /**
824  * @brief Formats InvalidObject message into JSON
825  * Message body: "The object at <arg1> is invalid."
826  *
827  * @param[in] arg1 Parameter of message that will replace %1 in its body.
828  *
829  * @returns Message InvalidObject formatted to JSON */
830 nlohmann::json invalidObject(const boost::urls::url_view_base& arg1);
831 
832 void invalidObject(crow::Response& res, const boost::urls::url_view_base& arg1);
833 
834 /**
835  * @brief Formats ResourceInStandby message into JSON
836  * Message body: "The request could not be performed because the resource is in
837  * standby."
838  *
839  *
840  * @returns Message ResourceInStandby formatted to JSON */
841 nlohmann::json resourceInStandby();
842 
843 void resourceInStandby(crow::Response& res);
844 
845 /**
846  * @brief Formats ActionParameterValueTypeError message into JSON
847  * Message body: "The value <arg1> for the parameter <arg2> in the action <arg3>
848  * is of a different type than the parameter can accept."
849  *
850  * @param[in] arg1 Parameter of message that will replace %1 in its body.
851  * @param[in] arg2 Parameter of message that will replace %2 in its body.
852  * @param[in] arg3 Parameter of message that will replace %3 in its body.
853  *
854  * @returns Message ActionParameterValueTypeError formatted to JSON */
855 nlohmann::json actionParameterValueTypeError(
856     const nlohmann::json& arg1, std::string_view arg2, std::string_view arg3);
857 
858 void actionParameterValueTypeError(
859     crow::Response& res, const nlohmann::json& arg1, std::string_view arg2,
860     std::string_view arg3);
861 
862 /**
863  * @brief Formats ActionParameterValueError message into JSON
864  * Message body: "Indicates that a parameter was given an invalid value."
865  *  The value for the parameter %1 in the action %2 is invalid.
866  *
867  * @param[in] arg1 Parameter of message that will replace %1 in its body.
868  * @param[in] arg2 Parameter of message that will replace %2 in its body.
869  *
870  * @returns Message ActionParameterValueError formatted to JSON */
871 nlohmann::json actionParameterValueError(const nlohmann::json& arg1,
872                                          std::string_view arg2);
873 
874 void actionParameterValueError(crow::Response& res, const nlohmann::json& arg1,
875                                std::string_view arg2);
876 
877 /**
878  * @brief Formats SessionLimitExceeded message into JSON
879  * Message body: "The session establishment failed due to the number of
880  * simultaneous sessions exceeding the limit of the implementation."
881  *
882  *
883  * @returns Message SessionLimitExceeded formatted to JSON */
884 nlohmann::json sessionLimitExceeded();
885 
886 void sessionLimitExceeded(crow::Response& res);
887 
888 /**
889  * @brief Formats ActionNotSupported message into JSON
890  * Message body: "The action <arg1> is not supported by the resource."
891  *
892  * @param[in] arg1 Parameter of message that will replace %1 in its body.
893  *
894  * @returns Message ActionNotSupported formatted to JSON */
895 nlohmann::json actionNotSupported(std::string_view arg1);
896 
897 void actionNotSupported(crow::Response& res, std::string_view arg1);
898 
899 /**
900  * @brief Formats InvalidIndex message into JSON
901  * Message body: "The index <arg1> is not a valid offset into the array."
902  *
903  * @param[in] arg1 Parameter of message that will replace %1 in its body.
904  *
905  * @returns Message InvalidIndex formatted to JSON */
906 nlohmann::json invalidIndex(int64_t arg1);
907 
908 void invalidIndex(crow::Response& res, int64_t arg1);
909 
910 /**
911  * @brief Formats EmptyJSON message into JSON
912  * Message body: "The request body submitted contained an empty JSON object and
913  * the service is unable to process it."
914  *
915  *
916  * @returns Message EmptyJSON formatted to JSON */
917 nlohmann::json emptyJSON();
918 
919 void emptyJSON(crow::Response& res);
920 
921 /**
922  * @brief Formats QueryNotSupportedOnResource message into JSON
923  * Message body: "Querying is not supported on the requested resource."
924  *
925  *
926  * @returns Message QueryNotSupportedOnResource formatted to JSON */
927 nlohmann::json queryNotSupportedOnResource();
928 
929 void queryNotSupportedOnResource(crow::Response& res);
930 
931 /**
932  * @brief Formats QueryNotSupportedOnOperation message into JSON
933  * Message body: "Querying is not supported with the requested operation."
934  *
935  *
936  * @returns Message QueryNotSupportedOnOperation formatted to JSON */
937 nlohmann::json queryNotSupportedOnOperation();
938 
939 void queryNotSupportedOnOperation(crow::Response& res);
940 
941 /**
942  * @brief Formats QueryCombinationInvalid message into JSON
943  * Message body: "Two or more query parameters in the request cannot be used
944  * together."
945  *
946  *
947  * @returns Message QueryCombinationInvalid formatted to JSON */
948 nlohmann::json queryCombinationInvalid();
949 
950 void queryCombinationInvalid(crow::Response& res);
951 
952 /**
953  * @brief Formats EventBufferExceeded message into JSON
954  * Message body: "Indicates undelivered events may have been lost due to a lack
955  * of buffer space in the service."
956  *
957  *
958  * @returns Message QueryCombinationInvalid formatted to JSON */
959 nlohmann::json eventBufferExceeded();
960 
961 void eventBufferExceeded(crow::Response& res);
962 
963 /**
964  * @brief Formats InsufficientPrivilege message into JSON
965  * Message body: "There are insufficient privileges for the account or
966  * credentials associated with the current session to perform the requested
967  * operation."
968  *
969  *
970  * @returns Message InsufficientPrivilege formatted to JSON */
971 nlohmann::json insufficientPrivilege();
972 
973 void insufficientPrivilege(crow::Response& res);
974 
975 /**
976  * @brief Formats PropertyValueModified message into JSON
977  * Message body: "The property <arg1> was assigned the value <arg2> due to
978  * modification by the service."
979  *
980  * @param[in] arg1 Parameter of message that will replace %1 in its body.
981  * @param[in] arg2 Parameter of message that will replace %2 in its body.
982  *
983  * @returns Message PropertyValueModified formatted to JSON */
984 nlohmann::json propertyValueModified(std::string_view arg1,
985                                      const nlohmann::json& arg2);
986 
987 void propertyValueModified(crow::Response& res, std::string_view arg1,
988                            const nlohmann::json& arg2);
989 
990 /**
991  * @brief Formats AccountNotModified message into JSON
992  * Message body: "The account modification request failed."
993  *
994  *
995  * @returns Message AccountNotModified formatted to JSON */
996 nlohmann::json accountNotModified();
997 
998 void accountNotModified(crow::Response& res);
999 
1000 /**
1001  * @brief Formats QueryParameterValueFormatError message into JSON
1002  * Message body: "The value <arg1> for the parameter <arg2> is of a different
1003  * format than the parameter can accept."
1004  *
1005  * @param[in] arg1 Parameter of message that will replace %1 in its body.
1006  * @param[in] arg2 Parameter of message that will replace %2 in its body.
1007  *
1008  * @returns Message QueryParameterValueFormatError formatted to JSON */
1009 
1010 nlohmann::json queryParameterValueFormatError(const nlohmann::json& arg1,
1011                                               std::string_view arg2);
1012 
1013 void queryParameterValueFormatError(
1014     crow::Response& res, const nlohmann::json& arg1, std::string_view arg2);
1015 
1016 /**
1017  * @brief Formats PropertyMissing message into JSON
1018  * Message body: "The property <arg1> is a required property and must be
1019  * included in the request."
1020  *
1021  * @param[in] arg1 Parameter of message that will replace %1 in its body.
1022  *
1023  * @returns Message PropertyMissing formatted to JSON */
1024 nlohmann::json propertyMissing(std::string_view arg1);
1025 
1026 void propertyMissing(crow::Response& res, std::string_view arg1);
1027 
1028 /**
1029  * @brief Formats ResourceExhaustion message into JSON
1030  * Message body: "The resource <arg1> was unable to satisfy the request due to
1031  * unavailability of resources."
1032  *
1033  * @param[in] arg1 Parameter of message that will replace %1 in its body.
1034  *
1035  * @returns Message ResourceExhaustion formatted to JSON */
1036 nlohmann::json resourceExhaustion(std::string_view arg1);
1037 
1038 void resourceExhaustion(crow::Response& res, std::string_view arg1);
1039 
1040 /**
1041  * @brief Formats AccountModified message into JSON
1042  * Message body: "The account was successfully modified."
1043  *
1044  *
1045  * @returns Message AccountModified formatted to JSON */
1046 nlohmann::json accountModified();
1047 
1048 void accountModified(crow::Response& res);
1049 
1050 /**
1051  * @brief Formats QueryParameterOutOfRange message into JSON
1052  * Message body: "The value <arg1> for the query parameter <arg2> is out of
1053  * range <arg3>."
1054  *
1055  * @param[in] arg1 Parameter of message that will replace %1 in its body.
1056  * @param[in] arg2 Parameter of message that will replace %2 in its body.
1057  * @param[in] arg3 Parameter of message that will replace %3 in its body.
1058  *
1059  * @returns Message QueryParameterOutOfRange formatted to JSON */
1060 nlohmann::json queryParameterOutOfRange(
1061     std::string_view arg1, std::string_view arg2, std::string_view arg3);
1062 
1063 void queryParameterOutOfRange(crow::Response& res, std::string_view arg1,
1064                               std::string_view arg2, std::string_view arg3);
1065 
1066 /**
1067  * @brief Formats PasswordChangeRequired message into JSON
1068  * Message body: The password provided for this account must be changed
1069  * before access is granted.  PATCH the 'Password' property for this
1070  * account located at the target URI '%1' to complete this process.
1071  *
1072  * @param[in] arg1 Parameter of message that will replace %1 in its body.
1073  *
1074  * @returns Message PasswordChangeRequired formatted to JSON */
1075 
1076 nlohmann::json passwordChangeRequired(const boost::urls::url_view_base& arg1);
1077 
1078 void passwordChangeRequired(crow::Response& res,
1079                             const boost::urls::url_view_base& arg1);
1080 
1081 /**
1082  * @brief Formats InvalidUpload message into JSON
1083  * Message body: Invalid file uploaded to %1: %2.*
1084  * @param[in] arg1 Parameter of message that will replace %1 in its body.
1085  * @param[in] arg2 Parameter of message that will replace %2 in its body.
1086  *
1087  * @returns Message InvalidUpload formatted to JSON */
1088 nlohmann::json invalidUpload(std::string_view arg1, std::string_view arg2);
1089 
1090 void invalidUpload(crow::Response& res, std::string_view arg1,
1091                    std::string_view arg2);
1092 
1093 /**
1094  * @brief Formats InsufficientStorage message into JSON
1095  * Message body: "Insufficient storage or memory available to complete the
1096  *  request."
1097  * @returns Message InsufficientStorage formatted to JSON */
1098 nlohmann::json insufficientStorage();
1099 
1100 void insufficientStorage(crow::Response& res);
1101 
1102 /**
1103  * @brief Formats OperationNotAllowed message into JSON
1104  * Message body: "he HTTP method is not allowed on this resource."
1105  * @returns Message OperationNotAllowed formatted to JSON */
1106 nlohmann::json operationNotAllowed();
1107 
1108 void operationNotAllowed(crow::Response& res);
1109 
1110 /**
1111  * @brief Formats ArraySizeTooLong message into JSON
1112  * Message body: "Indicates that a string value passed to the given resource
1113  * exceeded its length limit."
1114  * @returns Message ArraySizeTooLong formatted to JSON */
1115 nlohmann::json arraySizeTooLong(std::string_view property, uint64_t length);
1116 
1117 void arraySizeTooLong(crow::Response& res, std::string_view property,
1118                       uint64_t length);
1119 
1120 } // namespace messages
1121 
1122 } // namespace redfish
1123