oag_core/parse/
security.rs1use indexmap::IndexMap;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
6#[serde(rename_all = "camelCase")]
7pub enum SecuritySchemeType {
8 ApiKey,
9 Http,
10 OAuth2,
11 OpenIdConnect,
12 MutualTLS,
13}
14
15#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
17#[serde(rename_all = "lowercase")]
18pub enum ApiKeyLocation {
19 Query,
20 Header,
21 Cookie,
22}
23
24#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
26pub struct OAuthFlows {
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub implicit: Option<OAuthFlow>,
29 #[serde(skip_serializing_if = "Option::is_none")]
30 pub password: Option<OAuthFlow>,
31 #[serde(rename = "clientCredentials", skip_serializing_if = "Option::is_none")]
32 pub client_credentials: Option<OAuthFlow>,
33 #[serde(rename = "authorizationCode", skip_serializing_if = "Option::is_none")]
34 pub authorization_code: Option<OAuthFlow>,
35}
36
37#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
39pub struct OAuthFlow {
40 #[serde(rename = "authorizationUrl", skip_serializing_if = "Option::is_none")]
41 pub authorization_url: Option<String>,
42 #[serde(rename = "tokenUrl", skip_serializing_if = "Option::is_none")]
43 pub token_url: Option<String>,
44 #[serde(rename = "refreshUrl", skip_serializing_if = "Option::is_none")]
45 pub refresh_url: Option<String>,
46 #[serde(default)]
47 pub scopes: IndexMap<String, String>,
48}
49
50#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
52pub struct SecurityScheme {
53 #[serde(rename = "type")]
54 pub scheme_type: SecuritySchemeType,
55
56 #[serde(skip_serializing_if = "Option::is_none")]
57 pub description: Option<String>,
58
59 #[serde(skip_serializing_if = "Option::is_none")]
60 pub name: Option<String>,
61
62 #[serde(rename = "in", skip_serializing_if = "Option::is_none")]
63 pub location: Option<ApiKeyLocation>,
64
65 #[serde(skip_serializing_if = "Option::is_none")]
66 pub scheme: Option<String>,
67
68 #[serde(rename = "bearerFormat", skip_serializing_if = "Option::is_none")]
69 pub bearer_format: Option<String>,
70
71 #[serde(skip_serializing_if = "Option::is_none")]
72 pub flows: Option<OAuthFlows>,
73
74 #[serde(rename = "openIdConnectUrl", skip_serializing_if = "Option::is_none")]
75 pub open_id_connect_url: Option<String>,
76}
77
78pub type SecurityRequirement = IndexMap<String, Vec<String>>;