1#include <userver/proto-structs/io/std/chrono/year_month_day.hpp>
3#include <google/type/date.pb.h>
5#include <userver/proto-structs/date.hpp>
6#include <userver/proto-structs/exceptions.hpp>
7#include <userver/proto-structs/io/context.hpp>
8#include <userver/utils/impl/internal_tag.hpp>
10namespace proto_structs::io {
12std::chrono::year_month_day
13ReadProtoStruct(ReadContext& ctx, To<std::chrono::year_month_day>,
const ::google::type::Date& msg)
try {
14 Date date(
utils::impl::InternalTag{}, msg.year(), msg.month(), msg.day());
16 if (!date.HasYearMonthDay()) {
17 ctx.AddError(
"full date is expected for 'std::chrono::year_month_day' proto struct field");
18 return std::chrono::year_month_day{std::chrono::year{0}, std::chrono::month{0}, std::chrono::day{0}};
21 return date.ToChronoDate();
22}
catch (
const ValueError& e) {
23 ctx.AddError(e.what());
24 return std::chrono::year_month_day{std::chrono::year{0}, std::chrono::month{0}, std::chrono::day{0}};
27void WriteProtoStruct(WriteContext& ctx,
const std::chrono::year_month_day& obj, ::google::type::Date& msg)
try {
29 msg.set_year(date.YearNum());
30 msg.set_month(date.MonthNum());
31 msg.set_day(date.DayNum());
32}
catch (
const ValueError& e) {
33 ctx.AddError(e.what());