paperclip_core/v2/
mod.rs

1//! Core types and traits associated with the
2//! [OpenAPI v2 specification](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md).
3
4#[cfg(feature = "actix-base")]
5mod actix;
6mod extensions;
7pub mod models;
8#[cfg(feature = "codegen")]
9mod resolver;
10pub mod schema;
11
12#[cfg(feature = "actix-base")]
13pub use self::actix::{
14    AcceptedJson, CreatedJson, NoContent, OperationModifier, ResponderWrapper, ResponseWrapper,
15};
16
17#[cfg(feature = "actix4")]
18pub use self::actix::HttpResponseWrapper;
19
20pub use self::{
21    models::{DefaultSchema, ResolvableApi},
22    schema::Schema,
23};
24pub use paperclip_macros::*;
25pub use serde_json;
26
27#[cfg(feature = "codegen")]
28pub(crate) use self::resolver::Resolver;
29#[cfg(feature = "codegen")]
30pub(crate) use crate::error::ValidationError;
31
32#[cfg(feature = "codegen")]
33impl<S: Schema + Default> ResolvableApi<S> {
34    /// Consumes this API schema, resolves the references and returns
35    /// the resolved schema.
36    ///
37    /// This walks recursively, collects the referenced schema objects,
38    /// substitutes the referenced IDs with the pointer to schema objects
39    /// and returns the resolved object or an error if it encountered one.
40    pub fn resolve(self) -> Result<ResolvableApi<S>, ValidationError> {
41        let mut resolver = Resolver::from((
42            self.definitions,
43            self.paths,
44            self.parameters,
45            self.responses,
46        ));
47        resolver.resolve()?;
48        Ok(ResolvableApi {
49            swagger: self.swagger,
50            info: self.info,
51            definitions: resolver.defs,
52            paths: resolver.paths,
53            base_path: self.base_path,
54            host: self.host,
55            schemes: self.schemes,
56            consumes: self.consumes,
57            produces: self.produces,
58            coders: self.coders,
59            support_crates: self.support_crates,
60            parameters: resolver.params,
61            responses: resolver.resp,
62            spec_format: self.spec_format,
63            external_docs: self.external_docs,
64            security: self.security,
65            security_definitions: self.security_definitions,
66            tags: self.tags,
67            extensions: self.extensions,
68        })
69    }
70}