-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapidocs.rs
77 lines (69 loc) · 2.37 KB
/
apidocs.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
use utoipa::{
openapi::{
security::{ApiKey, ApiKeyValue, HttpAuthScheme, HttpBuilder, SecurityScheme},
ServerBuilder,
},
OpenApi,
};
use crate::{
auth::routes::AuthApiDocs, bot::routes::BotsApiDoc, channels::routes::ChannelsApiDocs,
friends::management::FriendsManagementApiDoc, friends::messaging::FriendsMessagingApiDoc,
guilds::routes::GuildsApiDocs, invites::routes::InvitesApiDoc, media::routes::MediaApiDocs,
messaging::routes::MessagingApiDocs, realtime::pubsub::PubSubApiDoc,
voice::routes::VoiceApiDoc,
};
#[derive(OpenApi)]
#[openapi(
modifiers(&TokenSecurityAddon)
)]
pub struct ApiDocs;
pub fn setup_oapi() -> utoipa::openapi::OpenApi {
let mut oapi = ApiDocs::openapi();
oapi.servers = Some(vec![
ServerBuilder::new().url("/").build(),
ServerBuilder::new().url("/api").build(),
]);
oapi.merge(AuthApiDocs::openapi());
oapi.merge(ChannelsApiDocs::openapi());
oapi.merge(GuildsApiDocs::openapi());
oapi.merge(MediaApiDocs::openapi());
oapi.merge(MessagingApiDocs::openapi());
oapi.merge(VoiceApiDoc::openapi());
oapi.merge(PubSubApiDoc::openapi());
oapi.merge(BotsApiDoc::openapi());
oapi.merge(FriendsManagementApiDoc::openapi());
oapi.merge(FriendsMessagingApiDoc::openapi());
oapi.merge(InvitesApiDoc::openapi());
oapi
}
struct TokenSecurityAddon;
impl utoipa::Modify for TokenSecurityAddon {
fn modify(&self, openapi: &mut utoipa::openapi::OpenApi) {
openapi.components = Some(
utoipa::openapi::ComponentsBuilder::new()
.security_scheme(
"token",
SecurityScheme::Http(
HttpBuilder::new()
.scheme(HttpAuthScheme::Bearer)
.bearer_format("AccessToken")
.build(),
),
)
.build(),
)
}
}
struct VoiceSecurityAddon;
impl utoipa::Modify for VoiceSecurityAddon {
fn modify(&self, openapi: &mut utoipa::openapi::OpenApi) {
openapi.components = Some(
utoipa::openapi::ComponentsBuilder::new()
.security_scheme(
"voice",
SecurityScheme::ApiKey(ApiKey::Header(ApiKeyValue::new("RTC-Token"))),
)
.build(),
)
}
}