Skip to content

Commit

Permalink
oapi: Add extensions "x-tokenName" (#514)
Browse files Browse the repository at this point in the history
* oapi: Add extensions "x-tokenName"

* Format Rust code using rustfmt

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
  • Loading branch information
chrislearn and github-actions[bot] authored Nov 27, 2023
1 parent ddb457a commit b12a72e
Show file tree
Hide file tree
Showing 8 changed files with 64 additions and 23 deletions.
21 changes: 10 additions & 11 deletions crates/compression/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ pub enum CompressionLevel {
}

/// CompressionAlgo
#[derive(Eq, PartialEq, Clone, Copy, Debug, Hash)]
#[non_exhaustive]
#[derive(Eq, PartialEq, Clone, Copy, Debug, Hash)]
pub enum CompressionAlgo {
#[cfg(feature = "brotli")]
#[cfg_attr(docsrs, doc(cfg(feature = "brotli")))]
Expand All @@ -61,18 +61,18 @@ impl FromStr for CompressionAlgo {
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
#[cfg(feature = "brotli")]
"br" => Ok(CompressionAlgo::Brotli),
"br" => Ok(Self::Brotli),
#[cfg(feature = "brotli")]
"brotli" => Ok(CompressionAlgo::Brotli),
"brotli" => Ok(Self::Brotli),

#[cfg(feature = "deflate")]
"deflate" => Ok(CompressionAlgo::Deflate),
"deflate" => Ok(Self::Deflate),

#[cfg(feature = "gzip")]
"gzip" => Ok(CompressionAlgo::Gzip),
"gzip" => Ok(Self::Gzip),

#[cfg(feature = "zstd")]
"zstd" => Ok(CompressionAlgo::Zstd),
"zstd" => Ok(Self::Zstd),
_ => Err(format!("unknown compression algorithm: {s}")),
}
}
Expand All @@ -82,14 +82,13 @@ impl Display for CompressionAlgo {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
#[cfg(feature = "brotli")]
CompressionAlgo::Brotli => write!(f, "br"),
Self::Brotli => write!(f, "br"),
#[cfg(feature = "deflate")]
CompressionAlgo::Deflate => write!(f, "deflate"),
Self::Deflate => write!(f, "deflate"),
#[cfg(feature = "gzip")]
CompressionAlgo::Gzip => write!(f, "gzip"),
Self::Gzip => write!(f, "gzip"),
#[cfg(feature = "zstd")]
CompressionAlgo::Zstd => write!(f, "zstd"),
_ => unreachable!(),
Self::Zstd => write!(f, "zstd"),
}
}
}
Expand Down
6 changes: 6 additions & 0 deletions crates/oapi/src/openapi/info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
//! [info]: <https://spec.openapis.org/oas/latest.html#info-object>
//! [openapi_trait]: ../../trait.OpenApi.html
//! [derive]: ../../derive.OpenApi.html
use std::collections::HashMap;

use serde::{Deserialize, Serialize};

/// # Examples
Expand Down Expand Up @@ -54,6 +56,10 @@ pub struct Info {

/// Document version typically the API version.
pub version: String,

/// Optional extensions "x-something"
#[serde(skip_serializing_if = "Option::is_none", flatten)]
pub extensions: Option<HashMap<String, serde_json::Value>>,
}

impl Info {
Expand Down
6 changes: 5 additions & 1 deletion crates/oapi/src/openapi/operation.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//! Implements [OpenAPI Operation Object][operation] types.
//!
//! [operation]: https://spec.openapis.org/oas/latest.html#operation-object
use std::collections::BTreeMap;
use std::collections::{BTreeMap, HashMap};
use std::ops::{Deref, DerefMut};

use serde::{Deserialize, Serialize};
Expand Down Expand Up @@ -156,6 +156,10 @@ pub struct Operation {
/// Alternative [`Server`]s for this [`Operation`].
#[serde(skip_serializing_if = "Servers::is_empty")]
pub servers: Servers,

/// Optional extensions "x-something"
#[serde(skip_serializing_if = "Option::is_none", flatten)]
pub extensions: Option<HashMap<String, serde_json::Value>>,
}

impl Operation {
Expand Down
14 changes: 14 additions & 0 deletions crates/oapi/src/openapi/parameter.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
//! Implements [OpenAPI Parameter Object][parameter] types.
//!
//! [parameter]: https://spec.openapis.org/oas/latest.html#parameter-object
use std::collections::HashMap;

use serde::{Deserialize, Serialize};
use serde_json::Value;

Expand Down Expand Up @@ -137,6 +139,10 @@ pub struct Parameter {
/// within [`Parameter::schema`] if defined.
#[serde(skip_serializing_if = "Option::is_none")]
example: Option<Value>,

/// Optional extensions "x-something"
#[serde(skip_serializing_if = "Option::is_none", flatten)]
pub extensions: Option<HashMap<String, serde_json::Value>>,
}

impl Parameter {
Expand Down Expand Up @@ -176,6 +182,7 @@ impl Parameter {
explode,
allow_reserved,
example,
extensions,
} = other;
if name != self.name || parameter_in != self.parameter_in {
return false;
Expand Down Expand Up @@ -206,6 +213,13 @@ impl Parameter {
if let Some(example) = example {
self.example = Some(example);
}
if let Some(extensions) = extensions {
if self.extensions.is_none() {
self.extensions = Some(HashMap::new());
} else {
self.extensions.as_mut().unwrap().extend(extensions);
}
}
true
}

Expand Down
6 changes: 5 additions & 1 deletion crates/oapi/src/openapi/response.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//! Implements [OpenApi Responses][responses].
//!
//! [responses]: https://spec.openapis.org/oas/latest.html#responses-object
use std::collections::BTreeMap;
use std::collections::{BTreeMap, HashMap};
use std::ops::{Deref, DerefMut};

use indexmap::IndexMap;
Expand Down Expand Up @@ -144,6 +144,10 @@ pub struct Response {
#[serde(skip_serializing_if = "IndexMap::is_empty", default)]
#[serde(rename = "content")]
pub contents: IndexMap<String, Content>,

/// Optional extensions "x-something"
#[serde(skip_serializing_if = "Option::is_none", flatten)]
pub extensions: Option<HashMap<String, serde_json::Value>>,
}

impl Response {
Expand Down
11 changes: 10 additions & 1 deletion crates/oapi/src/openapi/security.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
//! Refer to [`SecurityScheme`] for usage and more details.
//!
//! [security]: https://spec.openapis.org/oas/latest.html#security-scheme-object
use std::{collections::BTreeMap, iter};
use std::{
collections::{BTreeMap, HashMap},
iter,
};

use serde::{Deserialize, Serialize};

Expand Down Expand Up @@ -334,6 +337,10 @@ pub struct OAuth2 {
/// Optional description for the [`OAuth2`] [`Flow`] [`SecurityScheme`].
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,

/// Optional extensions "x-something"
#[serde(skip_serializing_if = "Option::is_none", flatten)]
pub extensions: Option<HashMap<String, serde_json::Value>>,
}

impl OAuth2 {
Expand Down Expand Up @@ -374,6 +381,7 @@ impl OAuth2 {
.map(|auth_flow| (String::from(auth_flow.get_type_as_str()), auth_flow)),
),
description: None,
extensions: None,
}
}

Expand Down Expand Up @@ -413,6 +421,7 @@ impl OAuth2 {
.map(|auth_flow| (String::from(auth_flow.get_type_as_str()), auth_flow)),
),
description: Some(description.into()),
extensions: None,
}
}
}
Expand Down
5 changes: 5 additions & 0 deletions crates/oapi/src/openapi/tag.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
//!
//! [tag]: https://spec.openapis.org/oas/latest.html#tag-object
use std::cmp::{Ord, Ordering, PartialOrd};
use std::collections::HashMap;

use serde::{Deserialize, Serialize};

Expand All @@ -26,6 +27,10 @@ pub struct Tag {
/// Additional external documentation for the tag.
#[serde(skip_serializing_if = "Option::is_none")]
pub external_docs: Option<ExternalDocs>,

/// Optional extensions "x-something"
#[serde(skip_serializing_if = "Option::is_none", flatten)]
pub extensions: Option<HashMap<String, serde_json::Value>>,
}
impl Ord for Tag {
fn cmp(&self, other: &Self) -> Ordering {
Expand Down
18 changes: 9 additions & 9 deletions crates/serve-static/src/dir.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@ impl FromStr for CompressionAlgo {

fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"br" => Ok(CompressionAlgo::Brotli),
"brotli" => Ok(CompressionAlgo::Brotli),
"deflate" => Ok(CompressionAlgo::Deflate),
"gzip" => Ok(CompressionAlgo::Gzip),
"zstd" => Ok(CompressionAlgo::Zstd),
"br" => Ok(Self::Brotli),
"brotli" => Ok(Self::Brotli),
"deflate" => Ok(Self::Deflate),
"gzip" => Ok(Self::Gzip),
"zstd" => Ok(Self::Zstd),
_ => Err(format!("unknown compression algorithm: {s}")),
}
}
Expand All @@ -50,10 +50,10 @@ impl FromStr for CompressionAlgo {
impl Display for CompressionAlgo {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
CompressionAlgo::Brotli => write!(f, "br"),
CompressionAlgo::Deflate => write!(f, "deflate"),
CompressionAlgo::Gzip => write!(f, "gzip"),
CompressionAlgo::Zstd => write!(f, "zstd"),
Self::Brotli => write!(f, "br"),
Self::Deflate => write!(f, "deflate"),
Self::Gzip => write!(f, "gzip"),
Self::Zstd => write!(f, "zstd"),
}
}
}
Expand Down

0 comments on commit b12a72e

Please sign in to comment.