schemadoc_diff/schemas/openapi303/
context.rs

1use crate::schemas::openapi303::schema::{
2    Components, Example, Header, Link, MayBeRef303, OpenApi303, Parameter,
3    RequestBody, Response, Schema, SecurityScheme,
4};
5
6pub fn deref_schema<'a>(
7    components: &'a Option<Components>,
8    reference: &str,
9) -> Option<&'a Schema> {
10    components.as_ref().and_then(|components| {
11        components.schemas.as_ref().and_then(|map| {
12            map.get(&reference.replace("#/components/schemas/", ""))
13                .map(|may_be_schema| match may_be_schema {
14                    MayBeRef303::Value(value) => value,
15                    _ => unimplemented!(),
16                })
17        })
18    })
19}
20
21pub fn deref_parameter<'a>(
22    components: &'a Option<Components>,
23    reference: &str,
24) -> Option<&'a Parameter> {
25    components.as_ref().and_then(|components| {
26        components.parameters.as_ref().and_then(|map| {
27            map.get(&reference.replace("#/components/parameters/", ""))
28                .map(|may_be_parameter| match may_be_parameter {
29                    MayBeRef303::Value(value) => value,
30                    _ => unimplemented!(),
31                })
32        })
33    })
34}
35
36pub fn deref_example<'a>(
37    swagger: &'a OpenApi303,
38    reference: &str,
39) -> Option<&'a Example> {
40    swagger.components.as_ref().and_then(|components| {
41        components.examples.as_ref().and_then(|map| {
42            map.get(&reference.replace("#/components/examples/", ""))
43                .map(|may_be_example| match may_be_example {
44                    MayBeRef303::Value(value) => value,
45                    _ => unimplemented!(),
46                })
47        })
48    })
49}
50
51pub fn deref_request_body<'a>(
52    swagger: &'a OpenApi303,
53    reference: &str,
54) -> Option<&'a RequestBody> {
55    swagger.components.as_ref().and_then(|components| {
56        components.request_bodies.as_ref().and_then(|map| {
57            map.get(&reference.replace("#/components/requestBodies/", ""))
58                .map(|may_be_request_body| match may_be_request_body {
59                    MayBeRef303::Value(value) => value,
60                    _ => unimplemented!(),
61                })
62        })
63    })
64}
65
66pub fn deref_header<'a>(
67    swagger: &'a OpenApi303,
68    reference: &str,
69) -> Option<&'a Header> {
70    swagger.components.as_ref().and_then(|components| {
71        components.headers.as_ref().and_then(|map| {
72            map.get(&reference.replace("#/components/headers/", ""))
73                .map(|may_be_header| match may_be_header {
74                    MayBeRef303::Value(value) => value,
75                    _ => unimplemented!(),
76                })
77        })
78    })
79}
80
81pub fn deref_security_scheme<'a>(
82    swagger: &'a OpenApi303,
83    reference: &str,
84) -> Option<&'a SecurityScheme> {
85    swagger.components.as_ref().and_then(|components| {
86        components.security_schemes.as_ref().and_then(|map| {
87            map.get(&reference.replace("#/components/securitySchemes/", ""))
88                .map(|may_be_security_scheme| match may_be_security_scheme {
89                    MayBeRef303::Value(value) => value,
90                    _ => unimplemented!(),
91                })
92        })
93    })
94}
95
96pub fn deref_link<'a>(
97    swagger: &'a OpenApi303,
98    reference: &str,
99) -> Option<&'a Link> {
100    swagger.components.as_ref().and_then(|components| {
101        components.links.as_ref().and_then(|map| {
102            map.get(&reference.replace("#/components/links/", "")).map(
103                |may_be_link| match may_be_link {
104                    MayBeRef303::Value(value) => value,
105                    _ => unimplemented!(),
106                },
107            )
108        })
109    })
110}
111
112pub fn deref_response<'a>(
113    swagger: &'a OpenApi303,
114    reference: &str,
115) -> Option<&'a Response> {
116    swagger.components.as_ref().and_then(|components| {
117        components.responses.as_ref().and_then(|map| {
118            map.get(&reference.replace("#/components/responses/", ""))
119                .map(|may_be_response| match may_be_response {
120                    MayBeRef303::Value(value) => value,
121                    _ => unimplemented!(),
122                })
123        })
124    })
125}