use serde::{Deserialize, Serialize};
use crate::{Map, model::extensions::Extensions};
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct OAuthFlows {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub implicit: Option<OAuthFlow>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub password: Option<OAuthFlow>,
#[serde(
rename = "clientCredentials",
default,
skip_serializing_if = "Option::is_none"
)]
pub client_credentials: Option<OAuthFlow>,
#[serde(
rename = "authorizationCode",
default,
skip_serializing_if = "Option::is_none"
)]
pub authorization_code: Option<OAuthFlow>,
#[cfg(feature = "openapi32")]
#[serde(
rename = "deviceAuthorization",
default,
skip_serializing_if = "Option::is_none"
)]
pub device_authorization: Option<OAuthFlow>,
#[serde(flatten)]
pub extensions: Extensions,
}
impl OAuthFlows {
#[must_use]
pub fn with_implicit(mut self, flow: OAuthFlow) -> Self {
self.implicit = Some(flow);
self
}
#[must_use]
pub fn with_password(mut self, flow: OAuthFlow) -> Self {
self.password = Some(flow);
self
}
#[must_use]
pub fn with_client_credentials(mut self, flow: OAuthFlow) -> Self {
self.client_credentials = Some(flow);
self
}
#[must_use]
pub fn with_authorization_code(mut self, flow: OAuthFlow) -> Self {
self.authorization_code = Some(flow);
self
}
#[cfg(feature = "openapi32")]
#[must_use]
pub fn with_device_authorization(mut self, flow: OAuthFlow) -> Self {
self.device_authorization = Some(flow);
self
}
}
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct OAuthFlow {
#[serde(
rename = "authorizationUrl",
default,
skip_serializing_if = "Option::is_none"
)]
pub authorization_url: Option<String>,
#[serde(rename = "tokenUrl", default, skip_serializing_if = "Option::is_none")]
pub token_url: Option<String>,
#[cfg(feature = "openapi32")]
#[serde(
rename = "deviceAuthorizationUrl",
default,
skip_serializing_if = "Option::is_none"
)]
pub device_authorization_url: Option<String>,
#[serde(
rename = "refreshUrl",
default,
skip_serializing_if = "Option::is_none"
)]
pub refresh_url: Option<String>,
pub scopes: Map<String>,
#[serde(flatten)]
pub extensions: Extensions,
}
impl OAuthFlow {
pub fn new(scopes: impl IntoIterator<Item = (String, String)>) -> Self {
Self {
scopes: scopes.into_iter().collect(),
..Self::default()
}
}
#[must_use]
pub fn with_authorization_url(mut self, url: impl Into<String>) -> Self {
self.authorization_url = Some(url.into());
self
}
#[must_use]
pub fn with_token_url(mut self, url: impl Into<String>) -> Self {
self.token_url = Some(url.into());
self
}
#[must_use]
pub fn with_refresh_url(mut self, url: impl Into<String>) -> Self {
self.refresh_url = Some(url.into());
self
}
#[cfg(feature = "openapi32")]
#[must_use]
pub fn with_device_authorization_url(mut self, url: impl Into<String>) -> Self {
self.device_authorization_url = Some(url.into());
self
}
}