mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-09-11 08:07:15 +00:00
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:
committed by
GitHub
co-authored by
Ruben Fiszel
parent
c3292f10e8
commit
7adf04858e
@@ -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")]
|
||||
|
||||
@@ -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),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user