1 use proc_macro
::{Ident, TokenStream, TokenTree}
;
7 raw_format_string
: Option
<String
>,
9 let ty_s
= &*ty
.to_string();
11 let format_description_display
= raw_format_string
.unwrap_or_else(|| format
.to_string());
13 let visitor
= if cfg
!(feature
= "parsing") {
18 impl<'a
> ::serde
::de
::Visitor
<'a
> for Visitor
{
19 type Value
= __TimeSerdeType
;
21 fn expecting(&self, f
: &mut ::std
::fmt
::Formatter
<'_
>) -> ::std
::fmt
::Result
{
27 "` in the format \"{}\"",
29 #(format_description_display.as_str())
33 fn visit_str
<E
: ::serde
::de
::Error
>(
36 ) -> Result
<__TimeSerdeType
, E
> {
37 __TimeSerdeType
::parse(value
, &DESCRIPTION
).map_err(E
::custom
)
41 impl<'a
> ::serde
::de
::Visitor
<'a
> for OptionVisitor
{
42 type Value
= Option
<__TimeSerdeType
>;
44 fn expecting(&self, f
: &mut ::std
::fmt
::Formatter
<'_
>) -> ::std
::fmt
::Result
{
50 ">` in the format \"{}\"",
52 #(format_description_display.as_str())
56 fn visit_some
<D
: ::serde
::de
::Deserializer
<'a
>>(
59 ) -> Result
<Option
<__TimeSerdeType
>, D
::Error
> {
61 .deserialize_any(Visitor
)
65 fn visit_none
<E
: ::serde
::de
::Error
>(
67 ) -> Result
<Option
<__TimeSerdeType
>, E
> {
76 let serialize_primary
= if cfg
!(feature
= "formatting") {
78 pub fn serialize
<S
: ::serde
::Serializer
>(
79 datetime
: &__TimeSerdeType
,
81 ) -> Result
<S
::Ok
, S
::Error
> {
82 use ::serde
::Serialize
;
85 .map_err(::time
::error
::Format
::into_invalid_serde_value
::<S
>)?
86 .serialize(serializer
)
93 let deserialize_primary
= if cfg
!(feature
= "parsing") {
95 pub fn deserialize
<'a
, D
: ::serde
::Deserializer
<'a
>>(
97 ) -> Result
<__TimeSerdeType
, D
::Error
> {
98 use ::serde
::Deserialize
;
99 deserializer
.deserialize_any(Visitor
)
106 let serialize_option
= if cfg
!(feature
= "formatting") {
108 pub fn serialize
<S
: ::serde
::Serializer
>(
109 option
: &Option
<__TimeSerdeType
>,
111 ) -> Result
<S
::Ok
, S
::Error
> {
112 use ::serde
::Serialize
;
113 option
.map(|datetime
| datetime
.format(&DESCRIPTION
))
115 .map_err(::time
::error
::Format
::into_invalid_serde_value
::<S
>)?
116 .serialize(serializer
)
123 let deserialize_option
= if cfg
!(feature
= "parsing") {
125 pub fn deserialize
<'a
, D
: ::serde
::Deserializer
<'a
>>(
127 ) -> Result
<Option
<__TimeSerdeType
>, D
::Error
> {
128 use ::serde
::Deserialize
;
129 deserializer
.deserialize_option(OptionVisitor
)
136 let deserialize_option_imports
= if cfg
!(feature
= "parsing") {
138 use super::{OptionVisitor, Visitor}
;
146 use ::time
::#(ty) as __TimeSerdeType;
148 const DESCRIPTION
: &[::time
::format_description
::FormatItem
<'_
>] = #S(format);
151 #S(serialize_primary)
152 #S(deserialize_primary)
154 pub(super) mod option
{
155 use super::{DESCRIPTION, __TimeSerdeType}
;
156 #S(deserialize_option_imports)
159 #S(deserialize_option)