userver: userver/formats/parse/time_of_day.hpp Source File
Loading...
Searching...
No Matches
time_of_day.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/formats/parse/time_of_day.hpp
4/// @brief utils::datetime::TimeOfDay parser for any format
5///
6/// @ingroup userver_universal userver_formats_parse
7
8#include <userver/utils/time_of_day.hpp>
9
10#include <userver/formats/common/meta.hpp>
11#include <userver/formats/parse/to.hpp>
12
13USERVER_NAMESPACE_BEGIN
14
15namespace formats::parse {
16
17template <typename Value, typename Duration>
18std::enable_if_t<common::kIsFormatValue<Value>,
19 utils::datetime::TimeOfDay<Duration>>
20Parse(const Value& value, To<utils::datetime::TimeOfDay<Duration>>) {
21 std::optional<std::string> str;
22 try {
23 str = value.template As<std::string>();
24 return utils::datetime::TimeOfDay<Duration>{*str};
25 } catch (const std::exception& e) {
26 if (str) {
27 throw typename Value::ParseException(
28 "'" + *str + "' cannot be parsed to `utils::datetime::TimeOfDay`");
29 } else {
30 throw typename Value::ParseException(
31 "Only strings can be parsed as `utils::datetime::TimeOfDay`");
32 }
33 }
34}
35
36} // namespace formats::parse
37
38USERVER_NAMESPACE_END