Skip to content

Commit 7599ea7

Browse files
server/prompter: Actually use single wrapping for serialization
As that what works with actual testing on GNOME shell
1 parent 2de4daa commit 7599ea7

1 file changed

Lines changed: 20 additions & 56 deletions

File tree

server/src/gnome/prompter.rs

Lines changed: 20 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -21,54 +21,8 @@ use crate::{
2121
///
2222
/// See: https://gitlab.gnome.org/GNOME/gcr/-/merge_requests/169
2323
mod 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>
9953
pub 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

Comments
 (0)