@@ -235,10 +235,10 @@ struct type_caster<absl::Time> {
235235 }
236236};
237237
238- template <typename CivilTimeType >
239- struct absl_civil_time_caster {
238+ template <typename CivilTimeUnitType >
239+ struct absl_civil_datetime_caster {
240240 public:
241- PYBIND11_TYPE_CASTER (CivilTimeType , const_name(" CivilTimeType " ));
241+ PYBIND11_TYPE_CASTER (CivilTimeUnitType , const_name(" CivilDateTime " ));
242242
243243 bool load (handle src, bool convert) {
244244 if (!convert || !hasattr (src, " year" ) || !hasattr (src, " month" ) ||
@@ -252,42 +252,68 @@ struct absl_civil_time_caster {
252252 minute = GetInt64Attr (src, " minute" );
253253 second = GetInt64Attr (src, " second" );
254254 }
255- value = CivilTimeType (GetInt64Attr (src, " year" ), GetInt64Attr (src, " month" ),
255+ value =
256+ CivilTimeUnitType (GetInt64Attr (src, " year" ), GetInt64Attr (src, " month" ),
256257 GetInt64Attr (src, " day" ), hour, minute, second);
257258 return true ;
258259 }
259260
260- static handle cast (const CivilTimeType& src, return_value_policy, handle) {
261+ static handle cast (const CivilTimeUnitType& src, return_value_policy,
262+ handle) {
261263 auto py_datetime_t = module::import (" datetime" ).attr (" datetime" );
262264 auto py_datetime = py_datetime_t (src.year (), src.month (), src.day (),
263265 src.hour (), src.minute (), src.second ());
264266 return py_datetime.release ();
265267 }
266268};
267269
270+ template <typename CivilTimeUnitType>
271+ struct absl_civil_date_caster {
272+ public:
273+ PYBIND11_TYPE_CASTER (CivilTimeUnitType, const_name(" CivilDate" ));
274+
275+ bool load (handle src, bool convert) {
276+ if (!convert || !hasattr (src, " year" ) || !hasattr (src, " month" ) ||
277+ !hasattr (src, " day" )) {
278+ return false ;
279+ }
280+ value =
281+ CivilTimeUnitType (GetInt64Attr (src, " year" ), GetInt64Attr (src, " month" ),
282+ GetInt64Attr (src, " day" ));
283+ return true ;
284+ }
285+
286+ static handle cast (const CivilTimeUnitType& src, return_value_policy,
287+ handle) {
288+ auto py_datetime_t = module::import (" datetime" ).attr (" date" );
289+ auto py_datetime = py_datetime_t (src.year (), src.month (), src.day ());
290+ return py_datetime.release ();
291+ }
292+ };
293+
268294template <>
269295struct type_caster <absl::CivilSecond>
270- : public absl_civil_time_caster <absl::CivilSecond> {};
296+ : public absl_civil_datetime_caster <absl::CivilSecond> {};
271297
272298template <>
273299struct type_caster <absl::CivilMinute>
274- : public absl_civil_time_caster <absl::CivilMinute> {};
300+ : public absl_civil_datetime_caster <absl::CivilMinute> {};
275301
276302template <>
277303struct type_caster <absl::CivilHour>
278- : public absl_civil_time_caster <absl::CivilHour> {};
304+ : public absl_civil_datetime_caster <absl::CivilHour> {};
279305
280306template <>
281307struct type_caster <absl::CivilDay>
282- : public absl_civil_time_caster <absl::CivilDay> {};
308+ : public absl_civil_date_caster <absl::CivilDay> {};
283309
284310template <>
285311struct type_caster <absl::CivilMonth>
286- : public absl_civil_time_caster <absl::CivilMonth> {};
312+ : public absl_civil_date_caster <absl::CivilMonth> {};
287313
288314template <>
289315struct type_caster <absl::CivilYear>
290- : public absl_civil_time_caster <absl::CivilYear> {};
316+ : public absl_civil_date_caster <absl::CivilYear> {};
291317
292318// Returns {true, a span referencing the data contained by src} without copying
293319// or converting the data if possible. Otherwise returns {false, an empty span}.
0 commit comments