diff --git a/core/Cargo.toml b/core/Cargo.toml
index a456d3bf2..3a607f085 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -38,7 +38,6 @@ actix-web-validator3 = { version = "3.0", optional = true, package = "actix-web-
validator12 = { version = "0.12", features = ["derive"], optional = true, package = "validator" }
validator14 = { version = "0.14", features = ["derive"], optional = true, package = "validator" }
openapiv3 = { version = "1.0.3", optional = true }
-indexmap = { version = "2.0", features = ["serde"], optional = true }
[features]
# actix-web support
@@ -54,7 +53,7 @@ nightly = ["paperclip-macros/nightly"]
# OpenAPI support (v2 and codegen)
v2 = ["paperclip-macros/v2"]
-v3 = ["v2", "openapiv3", "indexmap"]
+v3 = ["v2", "openapiv3"]
codegen = ["v2", "heck", "log"]
uuid = ["uuid0"]
uuid0 = ["uuid0_dep"]
diff --git a/core/src/lib.rs b/core/src/lib.rs
index ea7851d0f..80a317bcd 100644
--- a/core/src/lib.rs
+++ b/core/src/lib.rs
@@ -15,7 +15,7 @@ pub mod im;
pub mod util;
#[cfg(feature = "v2")]
pub mod v2;
-#[cfg(feature = "v3")]
+// #[cfg(feature = "v3")]
pub mod v3;
pub use self::error::ValidationError;
diff --git a/core/src/v2/models.rs b/core/src/v2/models.rs
index a686c0e1e..66055fb7d 100644
--- a/core/src/v2/models.rs
+++ b/core/src/v2/models.rs
@@ -84,6 +84,7 @@ pub enum DataTypeFormat {
Other,
}
+#[allow(clippy::to_string_trait_impl)]
impl ToString for DataTypeFormat {
fn to_string(&self) -> String {
match self {
@@ -439,7 +440,7 @@ pub struct PathItem
{
impl PathItem, Response> {
/// Normalizes this operation map.
/// - Collects and removes parameters shared across operations
- /// and adds them to the list global to this map.
+ /// and adds them to the list global to this map.
pub fn normalize(&mut self) {
// We're using `Option` over `BTreeSet` because we need to
// differentiate between the first operation that we use for initial
diff --git a/core/src/v2/schema.rs b/core/src/v2/schema.rs
index 0baa2ae76..2f945e7fb 100644
--- a/core/src/v2/schema.rs
+++ b/core/src/v2/schema.rs
@@ -257,11 +257,11 @@ impl_type_simple!(std::net::Ipv6Addr, DataType::String, DataTypeFormat::IpV6);
/// framework-specific macros:
///
/// - [`Apiv2Schema`](https://paperclip-rs.github.io/paperclip/paperclip_actix/derive.Apiv2Schema.html)
-/// for schema objects.
+/// for schema objects.
/// - [`Apiv2Security`](https://paperclip-rs.github.io/paperclip/paperclip_actix/derive.Apiv2Security.html)
-/// for security scheme objects.
+/// for security scheme objects.
/// - [`Apiv2Header`](https://paperclip-rs.github.io/paperclip/paperclip_actix/derive.Apiv2Header.html)
-/// for header parameters objects.
+/// for header parameters objects.
///
/// This is implemented for primitive types by default.
pub trait Apiv2Schema {
diff --git a/core/src/v3/contact.rs b/core/src/v3/contact.rs
index 603628cd5..911bbfd48 100644
--- a/core/src/v3/contact.rs
+++ b/core/src/v3/contact.rs
@@ -6,7 +6,7 @@ impl From for openapiv3::Contact {
name: v2.name,
url: v2.url,
email: v2.email,
- extensions: indexmap::IndexMap::new(),
+ extensions: Default::default(),
}
}
}
diff --git a/core/src/v3/external_documentation.rs b/core/src/v3/external_documentation.rs
index 5e2262a31..1e6923a1d 100644
--- a/core/src/v3/external_documentation.rs
+++ b/core/src/v3/external_documentation.rs
@@ -5,7 +5,7 @@ impl From for openapiv3::ExternalDocumentation {
openapiv3::ExternalDocumentation {
description: v2.description,
url: v2.url,
- extensions: indexmap::IndexMap::new(),
+ extensions: Self::default().extensions,
}
}
}
diff --git a/core/src/v3/header.rs b/core/src/v3/header.rs
index f3a21abcf..99ab77e94 100644
--- a/core/src/v3/header.rs
+++ b/core/src/v3/header.rs
@@ -7,10 +7,10 @@ impl From for openapiv3::Header {
style: Default::default(),
required: false,
deprecated: None,
- format: openapiv3::ParameterSchemaOrContent::Content(indexmap::IndexMap::new()),
+ format: openapiv3::ParameterSchemaOrContent::Content(Default::default()),
example: None,
- extensions: indexmap::IndexMap::new(),
- examples: indexmap::IndexMap::new(),
+ extensions: Default::default(),
+ examples: Default::default(),
}
}
}
diff --git a/core/src/v3/info.rs b/core/src/v3/info.rs
index 790824e47..1afb64700 100644
--- a/core/src/v3/info.rs
+++ b/core/src/v3/info.rs
@@ -9,13 +9,13 @@ impl From for openapiv3::Info {
contact: v2.contact.map(|c| c.into()),
license: v2.license.map(From::from),
version: v2.version,
- extensions: v2.extensions.into_iter().fold(
- indexmap::IndexMap::new(),
- |mut i, (k, v)| {
+ extensions: v2
+ .extensions
+ .into_iter()
+ .fold(Default::default(), |mut i, (k, v)| {
i.insert(k, v);
i
- },
- ),
+ }),
}
}
}
diff --git a/core/src/v3/license.rs b/core/src/v3/license.rs
index 9b18e051c..c1937829d 100644
--- a/core/src/v3/license.rs
+++ b/core/src/v3/license.rs
@@ -5,7 +5,7 @@ impl From for openapiv3::License {
openapiv3::License {
name: v2.name.unwrap_or_default(),
url: v2.url,
- extensions: indexmap::IndexMap::new(),
+ extensions: Default::default(),
}
}
}
diff --git a/core/src/v3/openapi.rs b/core/src/v3/openapi.rs
index 6f051e6ad..ce9e1fd6c 100644
--- a/core/src/v3/openapi.rs
+++ b/core/src/v3/openapi.rs
@@ -17,22 +17,19 @@ impl From for openapiv3::OpenAPI {
.security_schemes
.insert(name, openapiv3::ReferenceOr::Item(scheme.into()));
}
- components.responses = v2
- .responses
- .iter()
- .fold(indexmap::IndexMap::new(), |mut i, b| {
- i.insert(b.0.to_string(), b.1.clone().into());
+ components.responses = v2.responses.iter().fold(Default::default(), |mut i, b| {
+ i.insert(b.0.to_string(), b.1.clone().into());
+ i
+ });
+ spec.extensions = v2
+ .extensions
+ .into_iter()
+ .fold(Default::default(), |mut i, (k, v)| {
+ i.insert(k, v);
i
});
- spec.extensions =
- v2.extensions
- .into_iter()
- .fold(indexmap::IndexMap::new(), |mut i, (k, v)| {
- i.insert(k, v);
- i
- });
spec.paths = openapiv3::Paths {
- paths: v2.paths.iter().fold(indexmap::IndexMap::new(), |mut i, b| {
+ paths: v2.paths.iter().fold(Default::default(), |mut i, b| {
i.insert(
b.0.to_string(),
openapiv3::ReferenceOr::Item(b.1.clone().into()),
@@ -42,13 +39,10 @@ impl From for openapiv3::OpenAPI {
..Default::default()
};
- components.schemas = v2
- .definitions
- .iter()
- .fold(indexmap::IndexMap::new(), |mut i, b| {
- i.insert(b.0.to_string(), b.1.clone().into());
- i
- });
+ components.schemas = v2.definitions.iter().fold(Default::default(), |mut i, b| {
+ i.insert(b.0.to_string(), b.1.clone().into());
+ i
+ });
spec.components = Some(components);
spec
@@ -77,7 +71,7 @@ fn openapi3_servers(
url: format!("{}://{}{}", scheme_str, host, base.as_deref().unwrap_or("")),
description: None,
variables: None,
- extensions: indexmap::IndexMap::new(),
+ extensions: Default::default(),
}
})
.collect()
@@ -86,7 +80,7 @@ fn openapi3_servers(
url: format!("//{}{}", host, base.as_deref().unwrap_or("")),
description: None,
variables: None,
- extensions: indexmap::IndexMap::new(),
+ extensions: Default::default(),
}]
}
} else {
@@ -94,7 +88,7 @@ fn openapi3_servers(
url: base.unwrap_or_else(|| "/".to_string()),
description: None,
variables: None,
- extensions: indexmap::IndexMap::new(),
+ extensions: Default::default(),
}]
}
}
diff --git a/core/src/v3/operation.rs b/core/src/v3/operation.rs
index a7498634a..3f7c1bc38 100644
--- a/core/src/v3/operation.rs
+++ b/core/src/v3/operation.rs
@@ -85,10 +85,9 @@ impl From> for op
request_body,
responses: openapiv3::Responses {
default: None,
- responses: v2
- .responses
- .iter()
- .fold(indexmap::IndexMap::new(), |mut i, (k, v)| {
+ responses: v2.responses.iter().fold(
+ openapiv3::Responses::default().responses,
+ |mut i, (k, v)| {
if let Ok(code) = k.parse::() {
let code = openapiv3::StatusCode::Code(code);
i.insert(
@@ -101,7 +100,8 @@ impl From> for op
);
}
i
- }),
+ },
+ ),
..Default::default()
},
deprecated: v2.deprecated,
@@ -112,16 +112,19 @@ impl From> for op
v2.security
.iter()
.map(|s| {
- s.iter().fold(indexmap::IndexMap::new(), |mut i, (k, v)| {
- i.insert(k.to_string(), v.clone());
- i
- })
+ s.iter().fold(
+ openapiv3::SecurityRequirement::default(),
+ |mut i, (k, v)| {
+ i.insert(k.to_string(), v.clone());
+ i
+ },
+ )
})
.collect(),
)
},
servers: vec![],
- extensions: indexmap::IndexMap::new(),
+ extensions: Default::default(),
}
}
}
diff --git a/core/src/v3/paths.rs b/core/src/v3/paths.rs
index 5e516b67f..a78073b53 100644
--- a/core/src/v3/paths.rs
+++ b/core/src/v3/paths.rs
@@ -26,7 +26,7 @@ impl From for openapiv3::PathItem {
})
.parameters
},
- extensions: indexmap::IndexMap::new(),
+ extensions: Default::default(),
description: None,
summary: None,
}
diff --git a/core/src/v3/request_body.rs b/core/src/v3/request_body.rs
index 378155b18..6e355deba 100644
--- a/core/src/v3/request_body.rs
+++ b/core/src/v3/request_body.rs
@@ -19,9 +19,9 @@ impl From
))),
},
example: None,
- examples: indexmap::IndexMap::new(),
+ examples: Default::default(),
explode: None,
- extensions: indexmap::IndexMap::new(),
+ extensions: Default::default(),
};
match v2.in_ {
@@ -49,12 +49,12 @@ impl From
schema: v2.schema.map(|s| s.into()),
..Default::default()
};
- let mut map = indexmap::IndexMap::new();
+ let mut map = openapiv3::RequestBody::default().content;
map.insert(v2::SpecFormat::Json.mime().0.to_string(), media);
map
},
required: v2.required,
- extensions: indexmap::IndexMap::new(),
+ extensions: Default::default(),
})),
}
}
diff --git a/core/src/v3/response.rs b/core/src/v3/response.rs
index f626bcac7..1ac0a8dba 100644
--- a/core/src/v3/response.rs
+++ b/core/src/v3/response.rs
@@ -13,7 +13,7 @@ impl From> for openapiv3::Response {
.response
.headers
.iter()
- .fold(indexmap::IndexMap::new(), |mut i, b| {
+ .fold(Default::default(), |mut i, b| {
i.insert(
b.0.to_string(),
openapiv3::ReferenceOr::Item(b.1.clone().into()),
@@ -34,7 +34,7 @@ impl From> for openapiv3::Response {
..Default::default()
};
- let mut map = indexmap::IndexMap::new();
+ let mut map = openapiv3::Response::default().content;
match v2.operation.produces.as_ref() {
Some(range) => {
for mime in range {
@@ -52,11 +52,11 @@ impl From> for openapiv3::Response {
}
map
}
- None => indexmap::IndexMap::new(),
+ None => Default::default(),
}
},
- extensions: indexmap::IndexMap::new(),
- links: indexmap::IndexMap::new(),
+ extensions: Default::default(),
+ links: Default::default(),
}
}
}
@@ -72,13 +72,13 @@ impl From> for openapiv3::ReferenceOr {
let response = openapiv3::Response {
description: "".to_string(),
- headers: indexmap::IndexMap::new(),
+ headers: Default::default(),
content: {
let media = openapiv3::MediaType {
schema: Some(reference.into()),
..Default::default()
};
- let mut map = indexmap::IndexMap::new();
+ let mut map = openapiv3::Response::default().content;
match v2.operation.produces.as_ref() {
Some(range) => {
for mime in range {
@@ -92,8 +92,8 @@ impl From> for openapiv3::ReferenceOr for openapiv3::ReferenceOr {
description: v2.description,
discriminator: None,
default: None,
- extensions: indexmap::IndexMap::new(),
+ extensions: Default::default(),
},
schema_kind: {
if let Some(data_type) = v2.data_type {
@@ -175,12 +175,10 @@ fn v2_data_type_to_v3(
v2::DataType::Object => {
openapiv3::SchemaKind::Type(openapiv3::Type::Object(openapiv3::ObjectType {
properties: {
- properties
- .iter()
- .fold(indexmap::IndexMap::new(), |mut i, b| {
- i.insert(b.0.to_string(), b.1.deref().clone().into());
- i
- })
+ properties.iter().fold(Default::default(), |mut i, b| {
+ i.insert(b.0.to_string(), b.1.deref().clone().into());
+ i
+ })
},
required: required.iter().cloned().collect::>(),
additional_properties: None,
diff --git a/core/src/v3/security_scheme.rs b/core/src/v3/security_scheme.rs
index 5a0aa21ad..7f074da90 100644
--- a/core/src/v3/security_scheme.rs
+++ b/core/src/v3/security_scheme.rs
@@ -1,5 +1,14 @@
use super::v2;
+macro_rules! to_indexmap {
+ ($v2:expr) => {
+ $v2.scopes.iter().fold(Default::default(), |mut i, (k, v)| {
+ i.insert(k.to_string(), v.to_string());
+ i
+ })
+ };
+}
+
impl From for openapiv3::SecurityScheme {
fn from(v2: v2::SecurityScheme) -> Self {
match v2.type_.as_str() {
@@ -18,13 +27,6 @@ impl From for openapiv3::SecurityScheme {
description: v2.description,
},
"oauth2" => {
- let scopes = v2
- .scopes
- .iter()
- .fold(indexmap::IndexMap::new(), |mut i, (k, v)| {
- i.insert(k.clone(), v.clone());
- i
- });
let flow = v2.flow.unwrap_or_default();
openapiv3::SecurityScheme::OAuth2 {
flows: openapiv3::OAuth2Flows {
@@ -32,7 +34,7 @@ impl From for openapiv3::SecurityScheme {
"implicit" => Some(openapiv3::OAuth2Flow::Implicit {
authorization_url: v2.auth_url.clone().unwrap_or_default(),
refresh_url: None,
- scopes: scopes.clone(),
+ scopes: to_indexmap!(v2),
}),
_ => None,
},
@@ -40,7 +42,7 @@ impl From for openapiv3::SecurityScheme {
"password" => Some(openapiv3::OAuth2Flow::Password {
refresh_url: None,
token_url: v2.token_url.clone().unwrap_or_default(),
- scopes: scopes.clone(),
+ scopes: to_indexmap!(v2),
}),
_ => None,
},
@@ -48,7 +50,7 @@ impl From for openapiv3::SecurityScheme {
"application" => Some(openapiv3::OAuth2Flow::ClientCredentials {
refresh_url: None,
token_url: v2.token_url.clone().unwrap_or_default(),
- scopes: scopes.clone(),
+ scopes: to_indexmap!(v2),
}),
_ => None,
},
@@ -57,7 +59,7 @@ impl From for openapiv3::SecurityScheme {
authorization_url: v2.auth_url.clone().unwrap_or_default(),
token_url: v2.token_url.clone().unwrap_or_default(),
refresh_url: None,
- scopes,
+ scopes: to_indexmap!(v2),
}),
_ => None,
},
diff --git a/core/src/v3/tag.rs b/core/src/v3/tag.rs
index f55d1e44e..810548084 100644
--- a/core/src/v3/tag.rs
+++ b/core/src/v3/tag.rs
@@ -6,7 +6,7 @@ impl From for openapiv3::Tag {
name: v2.name,
description: v2.description,
external_docs: v2.external_docs.map(openapiv3::ExternalDocumentation::from),
- extensions: indexmap::IndexMap::new(),
+ extensions: Default::default(),
}
}
}
diff --git a/src/error.rs b/src/error.rs
index 950aae9a3..f1a7c335c 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -59,10 +59,6 @@ pub enum PaperClipError {
/// YAML coding errors.
#[error("YAML error: {}", _0)]
Yaml(serde_yaml::Error),
- #[cfg(feature = "codegen-fmt")]
- /// Errors from rustfmt.
- #[error("Rustfmt formatting error: {}", _0)]
- RustFmt(rustfmt_nightly::ErrorKind),
#[cfg(feature = "codegen")]
/// Errors in templating.
#[error("Templating error: {}", _0)]
@@ -73,7 +69,5 @@ impl_err_from!(PaperClipError::std::io::Error > Io);
impl_err_from!(PaperClipError::serde_json::Error > Json);
impl_err_from!(PaperClipError::serde_yaml::Error > Yaml);
impl_err_from!(PaperClipError::paperclip_core::ValidationError > Validation);
-#[cfg(feature = "codegen-fmt")]
-impl_err_from!(PaperClipError::rustfmt_nightly::ErrorKind > RustFmt);
#[cfg(feature = "codegen")]
impl_err_from!(PaperClipError::tinytemplate::error::Error > Templating);
diff --git a/src/v2/codegen/impls.rs b/src/v2/codegen/impls.rs
index a5f3c556e..4ce40cd34 100644
--- a/src/v2/codegen/impls.rs
+++ b/src/v2/codegen/impls.rs
@@ -926,7 +926,7 @@ impl<'a, 'b> SendableCodegen<'a, 'b> {
/// Handle field for a form data parameter.
fn handle_form_param(&mut self, field: StructField) {
let name = object::to_snake_case(field.name);
- if let Some(CollectionFormat::Multi) = field.delimiting.get(0) {
+ if let Some(CollectionFormat::Multi) = field.delimiting.first() {
let _ = write!(
self.form,
"
@@ -988,7 +988,7 @@ impl<'a, 'b> SendableCodegen<'a, 'b> {
/// Handle field for an URL query parameter.
fn handle_query_param(&mut self, field: StructField) {
let name = object::to_snake_case(field.name);
- if let Some(CollectionFormat::Multi) = field.delimiting.get(0) {
+ if let Some(CollectionFormat::Multi) = field.delimiting.first() {
self.multi_value_query.push(format!(
"
&self.{}param_{}.as_ref().map(|v| {{
diff --git a/src/v2/codegen/object.rs b/src/v2/codegen/object.rs
index 3af6ae04e..3ddc7aa35 100644
--- a/src/v2/codegen/object.rs
+++ b/src/v2/codegen/object.rs
@@ -1005,7 +1005,7 @@ impl ApiObject {
// FIXME: Currently, we're implementing the first value as enum default.
// If "default" field exists, then we should use that instead.
- if let Some(var) = self.variants().get(0) {
+ if let Some(var) = self.variants().first() {
writeln!(
f,
"impl Default for {name} {{
diff --git a/src/v2/mod.rs b/src/v2/mod.rs
index 3105a30bb..22879f60a 100644
--- a/src/v2/mod.rs
+++ b/src/v2/mod.rs
@@ -60,9 +60,9 @@
//! raw schema. During resolution, we:
//!
//! - walk through the nodes, find `$ref` fields and assign references to
-//! the actual definitions.
+//! the actual definitions.
//! - identify anonymous definitions in body parameters and response schemas
-//! and add them to the known map of definitions.
+//! and add them to the known map of definitions.
//!
//! ```rust,no_run
//! #[cfg(feature = "codegen")] {