@@ -21,54 +21,8 @@ use crate::{
2121///
2222/// See: https://gitlab.gnome.org/GNOME/gcr/-/merge_requests/169
2323mod double_value_optional {
24- use serde:: ser:: SerializeStruct ;
25- use zvariant:: DynamicType ;
26-
2724 use super :: * ;
2825
29- struct DoubleValueSerialize < ' a , T : Type + serde:: Serialize + DynamicType > ( pub & ' a Option < T > ) ;
30-
31- impl < T : Type + serde:: Serialize + DynamicType > serde:: Serialize for DoubleValueSerialize < ' _ , T > {
32- fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
33- where
34- S : serde:: Serializer ,
35- {
36- match self . 0 {
37- Some ( v) => {
38- struct InnerVariant < ' a , U : Type + serde:: Serialize + DynamicType > ( & ' a U ) ;
39-
40- impl < U : Type + serde:: Serialize + DynamicType > serde:: Serialize for InnerVariant < ' _ , U > {
41- fn serialize < S2 > ( & self , serializer : S2 ) -> Result < S2 :: Ok , S2 :: Error >
42- where
43- S2 : serde:: Serializer ,
44- {
45- // Serialize as a Variant containing the value
46- let mut inner_structure = serializer. serialize_struct ( "Variant" , 2 ) ?;
47- let sig = self . 0 . signature ( ) . to_string ( ) ;
48- inner_structure. serialize_field ( "signature" , & sig) ?;
49- inner_structure. serialize_field ( "value" , self . 0 ) ?;
50- inner_structure. end ( )
51- }
52- }
53-
54- let mut outer_structure = serializer. serialize_struct ( "Variant" , 2 ) ?;
55- outer_structure. serialize_field ( "signature" , "v" ) ?;
56- outer_structure. serialize_field ( "value" , & InnerVariant ( v) ) ?;
57- outer_structure. end ( )
58- }
59- None => serializer. serialize_none ( ) ,
60- }
61- }
62- }
63-
64- pub fn serialize < S , T > ( value : & Option < T > , serializer : S ) -> Result < S :: Ok , S :: Error >
65- where
66- S : serde:: Serializer ,
67- T : serde:: Serialize + zvariant:: Type + DynamicType ,
68- {
69- DoubleValueSerialize ( value) . serialize ( serializer)
70- }
71-
7226 pub fn deserialize < ' de , D , T > ( deserializer : D ) -> Result < Option < T > , D :: Error >
7327 where
7428 D : serde:: Deserializer < ' de > ,
@@ -98,49 +52,57 @@ mod double_value_optional {
9852// GcrPrompt properties <https://gitlab.gnome.org/GNOME/gcr/-/blob/main/gcr/gcr-prompt.c#L95>
9953pub struct Properties {
10054 #[ serde(
101- with = "double_value_optional" ,
55+ serialize_with = "as_value::optional::serialize" ,
56+ deserialize_with = "double_value_optional::deserialize" ,
10257 skip_serializing_if = "Option::is_none" ,
10358 default
10459 ) ]
10560 title : Option < String > ,
10661 #[ serde(
107- with = "double_value_optional" ,
62+ serialize_with = "as_value::optional::serialize" ,
63+ deserialize_with = "double_value_optional::deserialize" ,
10864 skip_serializing_if = "Option::is_none" ,
10965 default
11066 ) ]
11167 message : Option < String > ,
11268 #[ serde(
113- with = "double_value_optional" ,
69+ serialize_with = "as_value::optional::serialize" ,
70+ deserialize_with = "double_value_optional::deserialize" ,
11471 skip_serializing_if = "Option::is_none" ,
11572 default
11673 ) ]
11774 description : Option < String > ,
11875 #[ serde(
119- with = "double_value_optional" ,
76+ serialize_with = "as_value::optional::serialize" ,
77+ deserialize_with = "double_value_optional::deserialize" ,
12078 skip_serializing_if = "Option::is_none" ,
12179 default
12280 ) ]
12381 warning : Option < String > ,
12482 #[ serde(
125- with = "double_value_optional" ,
83+ serialize_with = "as_value::optional::serialize" ,
84+ deserialize_with = "double_value_optional::deserialize" ,
12685 skip_serializing_if = "Option::is_none" ,
12786 default
12887 ) ]
12988 password_new : Option < bool > ,
13089 #[ serde(
131- with = "double_value_optional" ,
90+ serialize_with = "as_value::optional::serialize" ,
91+ deserialize_with = "double_value_optional::deserialize" ,
13292 skip_serializing_if = "Option::is_none" ,
13393 default
13494 ) ]
13595 password_strength : Option < i32 > ,
13696 #[ serde(
137- with = "double_value_optional" ,
97+ serialize_with = "as_value::optional::serialize" ,
98+ deserialize_with = "double_value_optional::deserialize" ,
13899 skip_serializing_if = "Option::is_none" ,
139100 default
140101 ) ]
141102 choice_label : Option < String > ,
142103 #[ serde(
143- with = "double_value_optional" ,
104+ serialize_with = "as_value::optional::serialize" ,
105+ deserialize_with = "double_value_optional::deserialize" ,
144106 skip_serializing_if = "Option::is_none" ,
145107 default
146108 ) ]
@@ -152,13 +114,15 @@ pub struct Properties {
152114 ) ]
153115 caller_window : Option < WindowIdentifierType > ,
154116 #[ serde(
155- with = "double_value_optional" ,
117+ serialize_with = "as_value::optional::serialize" ,
118+ deserialize_with = "double_value_optional::deserialize" ,
156119 skip_serializing_if = "Option::is_none" ,
157120 default
158121 ) ]
159122 continue_label : Option < String > ,
160123 #[ serde(
161- with = "double_value_optional" ,
124+ serialize_with = "as_value::optional::serialize" ,
125+ deserialize_with = "double_value_optional::deserialize" ,
162126 skip_serializing_if = "Option::is_none" ,
163127 default
164128 ) ]
0 commit comments