7#include <userver/formats/parse/to.hpp>
9#include <boost/optional.hpp>
11USERVER_NAMESPACE_BEGIN
14namespace formats::
parse {
16template <
class Value,
typename T>
17boost::optional<T> Parse(
const Value& value, To<boost::optional<T>>) {
18 if (value.IsMissing() || value.IsNull()) {
21 return value.
template As<T>();
25boost::optional<std::nullptr_t> Parse(
const Value&, To<boost::optional<std::nullptr_t>>) {
26 static_assert(!
sizeof(Value),
"optional<nullptr_t> is forbidden, check IsNull() instead");
30template <
class Value,
typename T>
31boost::optional<T> Convert(
const Value& value, To<boost::optional<T>>) {
32 if (value.IsMissing() || value.IsNull()) {
35 return value.
template ConvertTo<T>();
39boost::optional<std::nullptr_t> Convert(
const Value&, To<boost::optional<std::nullptr_t>>) {
40 static_assert(!
sizeof(Value),
"optional<nullptr_t> is forbidden, check IsNull() instead");