Skip to main content

openapi_nexus/spec/oas32/spec/
flows.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4use url::Url;
5
6use super::spec_extensions;
7
8/// Allows configuration of the supported OAuth Flows.
9#[derive(Debug, Clone, Default, PartialEq, Deserialize, Serialize)]
10#[serde(rename_all = "camelCase")]
11pub struct Flows {
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub implicit: Option<ImplicitFlow>,
14
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub password: Option<PasswordFlow>,
17
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub client_credentials: Option<ClientCredentialsFlow>,
20
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub authorization_code: Option<AuthorizationCodeFlow>,
23
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub device_authorization: Option<DeviceAuthorizationFlow>,
26
27    #[serde(flatten, with = "spec_extensions")]
28    pub extensions: BTreeMap<String, serde_json::Value>,
29}
30
31#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
32#[serde(rename_all = "camelCase")]
33pub struct ImplicitFlow {
34    pub authorization_url: Url,
35
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub refresh_url: Option<Url>,
38
39    #[serde(default)]
40    pub scopes: BTreeMap<String, String>,
41
42    #[serde(flatten, with = "spec_extensions")]
43    pub extensions: BTreeMap<String, serde_json::Value>,
44}
45
46#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
47#[serde(rename_all = "camelCase")]
48pub struct PasswordFlow {
49    pub token_url: Url,
50
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub refresh_url: Option<Url>,
53
54    #[serde(default)]
55    pub scopes: BTreeMap<String, String>,
56}
57
58#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
59#[serde(rename_all = "camelCase")]
60pub struct ClientCredentialsFlow {
61    pub token_url: Url,
62
63    #[serde(skip_serializing_if = "Option::is_none")]
64    pub refresh_url: Option<Url>,
65
66    #[serde(default)]
67    pub scopes: BTreeMap<String, String>,
68}
69
70#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
71#[serde(rename_all = "camelCase")]
72pub struct AuthorizationCodeFlow {
73    pub authorization_url: Url,
74
75    pub token_url: Url,
76
77    #[serde(skip_serializing_if = "Option::is_none")]
78    pub refresh_url: Option<Url>,
79
80    #[serde(default)]
81    pub scopes: BTreeMap<String, String>,
82}
83
84#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
85#[serde(rename_all = "camelCase")]
86pub struct DeviceAuthorizationFlow {
87    pub device_authorization_url: Url,
88
89    pub token_url: Url,
90
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub refresh_url: Option<Url>,
93
94    #[serde(default)]
95    pub scopes: BTreeMap<String, String>,
96}