use crate::deserialize::DeserializeVecLenient;
use serde::{Deserialize, Serialize};
use serde_alias::serde_alias;
use serde_inline_default::serde_inline_default;
use serde_with::{formats::CommaSeparator, serde_as, PickFirst, StringWithSeparator};
use url::Url;
#[serde_alias(ScreamingSnakeCase)]
#[serde_inline_default]
#[serde_as]
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct Config {
pub url: Url,
pub username: Option<String>,
pub password: Option<String>,
pub mfa_token: Option<String>,
#[serde_as(
as = "PickFirst<(DeserializeVecLenient<String>, StringWithSeparator::<CommaSeparator, String>)>"
)]
#[serde(default)]
pub headers: Vec<String>,
#[serde_inline_default(30.0)]
pub connect_timeout: f64,
#[serde_inline_default(30.0)]
pub call_timeout: f64,
}
impl Default for Config {
fn default() -> Self {
Self {
url: Url::parse("http://localhost:3001").unwrap(),
username: None,
password: None,
mfa_token: None,
headers: Vec::new(),
connect_timeout: 30.0,
call_timeout: 30.0,
}
}
}