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>, utils::datetime::TimeOfDay<Duration>>
19Parse(const Value& value, To<utils::datetime::TimeOfDay<Duration>>) {
20 std::optional<std::string> str;
21 try {
22 str = value.template As<std::string>();
23 return utils::datetime::TimeOfDay<Duration>{*str};
24 } catch (const std::exception& e) {
25 if (str) {
26 throw typename Value::ParseException("'" + *str + "' cannot be parsed to `utils::datetime::TimeOfDay`");
27 } else {
28 throw typename Value::ParseException("Only strings can be parsed as `utils::datetime::TimeOfDay`");
29 }
30 }
31}
32
33} // namespace formats::parse
34
35USERVER_NAMESPACE_END