mirror of
https://gitlab.com/msrd0/gotham-restful.git
synced 2025-05-09 08:00:41 +00:00
fix ui when openapi is enabled
This commit is contained in:
parent
30edd349ed
commit
c640efcb88
9 changed files with 64 additions and 32 deletions
|
@ -1,4 +1,4 @@
|
|||
use crate::{OpenapiSchema, OpenapiType};
|
||||
use crate::OpenapiSchema;
|
||||
use indexmap::IndexMap;
|
||||
use openapiv3::{
|
||||
Components, OpenAPI, PathItem, ReferenceOr,
|
||||
|
@ -83,8 +83,7 @@ impl OpenapiBuilder {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn add_schema<T: OpenapiType>(&mut self) -> ReferenceOr<Schema> {
|
||||
let mut schema = T::schema();
|
||||
pub fn add_schema(&mut self, mut schema: OpenapiSchema) -> ReferenceOr<Schema> {
|
||||
match schema.name.clone() {
|
||||
Some(name) => {
|
||||
let reference = Reference {
|
||||
|
@ -105,6 +104,7 @@ impl OpenapiBuilder {
|
|||
#[allow(dead_code)]
|
||||
mod test {
|
||||
use super::*;
|
||||
use crate::OpenapiType;
|
||||
|
||||
#[derive(OpenapiType)]
|
||||
struct Message {
|
||||
|
@ -142,7 +142,7 @@ mod test {
|
|||
#[test]
|
||||
fn add_schema() {
|
||||
let mut builder = OpenapiBuilder::new(info());
|
||||
builder.add_schema::<Option<Messages>>();
|
||||
builder.add_schema(<Option<Messages>>::schema());
|
||||
let openapi = openapi(builder);
|
||||
|
||||
assert_eq!(
|
||||
|
|
|
@ -184,12 +184,11 @@ impl OperationDescription {
|
|||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
use crate::{OpenapiType, ResourceResult};
|
||||
|
||||
#[test]
|
||||
fn no_content_schema_to_content() {
|
||||
let types = NoContent::accepted_types();
|
||||
let schema = <NoContent as OpenapiType>::schema();
|
||||
let schema = <NoContent as ResourceResult>::schema();
|
||||
let content = OperationDescription::schema_to_content(types.or_all_types(), Item(schema.into_schema()));
|
||||
assert!(content.is_empty());
|
||||
}
|
||||
|
@ -197,7 +196,7 @@ mod test {
|
|||
#[test]
|
||||
fn raw_schema_to_content() {
|
||||
let types = Raw::<&str>::accepted_types();
|
||||
let schema = <Raw<&str> as OpenapiType>::schema();
|
||||
let schema = <Raw<&str> as ResourceResult>::schema();
|
||||
let content = OperationDescription::schema_to_content(types.or_all_types(), Item(schema.into_schema()));
|
||||
assert_eq!(content.len(), 1);
|
||||
let json = serde_json::to_string(&content.values().nth(0).unwrap()).unwrap();
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use super::{builder::OpenapiBuilder, handler::OpenapiHandler, operation::OperationDescription};
|
||||
use crate::{routing::*, EndpointWithSchema, OpenapiType, ResourceWithSchema};
|
||||
use crate::{routing::*, EndpointWithSchema, OpenapiType, ResourceResult, ResourceWithSchema};
|
||||
use gotham::{hyper::Method, pipeline::chain::PipelineHandleChain, router::builder::*};
|
||||
use once_cell::sync::Lazy;
|
||||
use regex::{Captures, Regex};
|
||||
|
@ -69,7 +69,7 @@ macro_rules! implOpenapiRouter {
|
|||
P: RefUnwindSafe + Send + Sync + 'static
|
||||
{
|
||||
fn endpoint<E: EndpointWithSchema + 'static>(&mut self) {
|
||||
let schema = (self.0).openapi_builder.add_schema::<E::Output>();
|
||||
let schema = (self.0).openapi_builder.add_schema(E::Output::schema());
|
||||
let mut descr = OperationDescription::new::<E>(schema);
|
||||
if E::has_placeholders() {
|
||||
descr.set_path_params(E::Placeholders::schema());
|
||||
|
@ -78,7 +78,7 @@ macro_rules! implOpenapiRouter {
|
|||
descr.set_query_params(E::Params::schema());
|
||||
}
|
||||
if E::needs_body() {
|
||||
let body_schema = (self.0).openapi_builder.add_schema::<E::Body>();
|
||||
let body_schema = (self.0).openapi_builder.add_schema(E::Body::schema());
|
||||
descr.set_body::<E::Body>(body_schema);
|
||||
}
|
||||
|
||||
|
|
|
@ -65,13 +65,6 @@ pub trait ResourceResult {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "openapi")]
|
||||
impl<Res: ResourceResult> crate::OpenapiType for Res {
|
||||
fn schema() -> OpenapiSchema {
|
||||
Self::schema()
|
||||
}
|
||||
}
|
||||
|
||||
/// The default json returned on an 500 Internal Server Error.
|
||||
#[derive(Debug, Serialize)]
|
||||
pub(crate) struct ResourceError {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
use super::{handle_error, IntoResponseError, ResourceResult};
|
||||
#[cfg(feature = "openapi")]
|
||||
use crate::OpenapiSchema;
|
||||
use crate::{FromBody, RequestBody, ResourceType, Response};
|
||||
#[cfg(feature = "openapi")]
|
||||
use crate::{OpenapiSchema, OpenapiType};
|
||||
|
||||
use futures_core::future::Future;
|
||||
use futures_util::{future, future::FutureExt};
|
||||
|
@ -89,6 +89,16 @@ impl<T: for<'a> From<&'a [u8]>> FromBody for Raw<T> {
|
|||
|
||||
impl<T> RequestBody for Raw<T> where Raw<T>: FromBody + ResourceType {}
|
||||
|
||||
#[cfg(feature = "openapi")]
|
||||
impl<T> OpenapiType for Raw<T> {
|
||||
fn schema() -> OpenapiSchema {
|
||||
OpenapiSchema::new(SchemaKind::Type(Type::String(StringType {
|
||||
format: VariantOrUnknownOrEmpty::Item(StringFormat::Binary),
|
||||
..Default::default()
|
||||
})))
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Into<Body>> ResourceResult for Raw<T>
|
||||
where
|
||||
Self: Send
|
||||
|
@ -101,10 +111,7 @@ where
|
|||
|
||||
#[cfg(feature = "openapi")]
|
||||
fn schema() -> OpenapiSchema {
|
||||
OpenapiSchema::new(SchemaKind::Type(Type::String(StringType {
|
||||
format: VariantOrUnknownOrEmpty::Item(StringFormat::Binary),
|
||||
..Default::default()
|
||||
})))
|
||||
<Self as OpenapiType>::schema()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue