Skip to main content

openapi_nexus_spec/oas31/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(flatten, with = "spec_extensions")]
25    pub extensions: BTreeMap<String, serde_json::Value>,
26}
27
28#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
29#[serde(rename_all = "camelCase")]
30pub struct ImplicitFlow {
31    pub authorization_url: Url,
32
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub refresh_url: Option<Url>,
35
36    #[serde(default)]
37    pub scopes: BTreeMap<String, String>,
38
39    #[serde(flatten, with = "spec_extensions")]
40    pub extensions: BTreeMap<String, serde_json::Value>,
41}
42
43#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
44#[serde(rename_all = "camelCase")]
45pub struct PasswordFlow {
46    pub token_url: Url,
47
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub refresh_url: Option<Url>,
50
51    #[serde(default)]
52    pub scopes: BTreeMap<String, String>,
53}
54
55#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
56#[serde(rename_all = "camelCase")]
57pub struct ClientCredentialsFlow {
58    pub token_url: Url,
59
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub refresh_url: Option<Url>,
62
63    #[serde(default)]
64    pub scopes: BTreeMap<String, String>,
65}
66
67#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
68#[serde(rename_all = "camelCase")]
69pub struct AuthorizationCodeFlow {
70    pub authorization_url: Url,
71
72    pub token_url: Url,
73
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub refresh_url: Option<Url>,
76
77    #[serde(default)]
78    pub scopes: BTreeMap<String, String>,
79}