feat(backend): parse expires_in from string in TokenResponse (#2353)

* feat(backend): parse expires_in from string in TokenResponse

* Update more_serde.rs

---------

Co-authored-by: Ruben Fiszel <ruben@rubenfiszel.com>
This commit is contained in:
denglertai
2023-09-29 11:34:27 +02:00
committed by GitHub
co-authored by Ruben Fiszel
parent c3292f10e8
commit 7adf04858e
2 changed files with 34 additions and 0 deletions
+3
View File
@@ -37,6 +37,7 @@ use windmill_common::db::UserDB;
use windmill_common::jobs::JobPayload;
use windmill_common::users::username_to_permissioned_as;
use windmill_common::utils::{not_found_if_none, now_from_db};
use windmill_common::more_serde::maybe_number_opt;
use crate::db::ApiAuthed;
use crate::saml::SamlSsoLogin;
@@ -340,6 +341,8 @@ pub struct SlackTokenResponse {
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct TokenResponse {
access_token: AccessToken,
#[serde(deserialize_with = "maybe_number_opt")]
#[serde(default)]
expires_in: Option<u64>,
refresh_token: Option<RefreshToken>,
#[serde(deserialize_with = "helpers::deserialize_space_delimited_vec")]
+31
View File
@@ -9,6 +9,8 @@
//! helpers for serde + serde derive attributes
use crate::utils::rd_string;
use serde::{Deserialize, Deserializer};
use std::{fmt::Display, str::FromStr};
pub fn default_true() -> bool {
true
@@ -33,3 +35,32 @@ pub fn default_id() -> String {
pub fn is_default<T: Default + std::cmp::PartialEq>(t: &T) -> bool {
&T::default() == t
}
pub fn maybe_number_opt<'de, T, D>(deserializer: D) -> Result<Option<T>, D::Error>
where
D: Deserializer<'de>,
T: FromStr + serde::Deserialize<'de>,
<T as FromStr>::Err: Display,
{
#[derive(Deserialize)]
#[serde(untagged)]
enum NumericOrNull<'a, T> {
String(String),
Str(&'a str),
RawT(T),
Null,
}
match NumericOrNull::<T>::deserialize(deserializer)? {
NumericOrNull::String(s) => match s.as_str() {
"" => Ok(None),
_ => T::from_str(&s).map(Some).map_err(serde::de::Error::custom),
},
NumericOrNull::Str(s) => match s {
"" => Ok(None),
_ => T::from_str(s).map(Some).map_err(serde::de::Error::custom),
},
NumericOrNull::RawT(i) => Ok(Some(i)),
NumericOrNull::Null => Ok(None),
}
}