From 1ededa3476aab868364f6853706e91b7b0ad4e4c Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 11 Jun 2023 13:33:38 +0800 Subject: [PATCH] add some serde skip --- libs/hbb_common/src/config.rs | 59 +++++++++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 9 deletions(-) diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index d668067c7..53f49ab1d 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -291,33 +291,74 @@ pub struct PeerInfoSerde { #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)] pub struct ConfigOidc { - #[serde(default, deserialize_with = "deserialize_usize")] + #[serde( + default, + skip_serializing_if = "is_default", + deserialize_with = "deserialize_usize" + )] pub max_auth_count: usize, - #[serde(default, deserialize_with = "deserialize_string")] + #[serde( + default, + skip_serializing_if = "String::is_empty", + deserialize_with = "deserialize_string" + )] pub callback_url: String, #[serde( default, + skip_serializing_if = "HashMap::is_empty", deserialize_with = "deserialize_hashmap_string_configoidcprovider" )] pub providers: HashMap, } +fn is_default(v: &T) -> bool { + *v == T::default() +} + #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)] pub struct ConfigOidcProvider { // seconds. 0 means never expires - #[serde(default, deserialize_with = "deserialize_u32")] + #[serde( + default, + skip_serializing_if = "is_default", + deserialize_with = "deserialize_u32" + )] pub refresh_token_expires_in: u32, - #[serde(default, deserialize_with = "deserialize_string")] + #[serde( + default, + skip_serializing_if = "String::is_empty", + deserialize_with = "deserialize_string" + )] pub client_id: String, - #[serde(default, deserialize_with = "deserialize_string")] + #[serde( + default, + skip_serializing_if = "String::is_empty", + deserialize_with = "deserialize_string" + )] pub client_secret: String, - #[serde(default, deserialize_with = "deserialize_option_string")] + #[serde( + default, + skip_serializing_if = "Option::is_none", + deserialize_with = "deserialize_option_string" + )] pub issuer: Option, - #[serde(default, deserialize_with = "deserialize_option_string")] + #[serde( + default, + skip_serializing_if = "Option::is_none", + deserialize_with = "deserialize_option_string" + )] pub authorization_endpoint: Option, - #[serde(default, deserialize_with = "deserialize_option_string")] + #[serde( + default, + skip_serializing_if = "Option::is_none", + deserialize_with = "deserialize_option_string" + )] pub token_endpoint: Option, - #[serde(default, deserialize_with = "deserialize_option_string")] + #[serde( + default, + skip_serializing_if = "Option::is_none", + deserialize_with = "deserialize_option_string" + )] pub userinfo_endpoint: Option, }