Skip to content
This repository has been archived by the owner on Jan 11, 2023. It is now read-only.

Commit

Permalink
feat(cargo-swagg): print request bodies
Browse files Browse the repository at this point in the history
  • Loading branch information
sergeysova committed Mar 21, 2020
1 parent 4d46b19 commit d919840
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 8 deletions.
27 changes: 23 additions & 4 deletions cargo-swagg/out.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,15 +56,34 @@ pub mod api {
}
}
pub mod components {
pub mod request_bodies {}
pub mod request_bodies {
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct Register {
pub email: String,
pub demo: Option<Vec<Vec<String>>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct RegisterConfirmation {
#[serde(rename = "confirmationCode")]
pub confirmation_code: String,
#[serde(rename = "firstName")]
pub first_name: String,
#[serde(rename = "lastName")]
pub last_name: String,
pub password: String,
pub demo: Option<f32>,
pub customizer: Option<crate::app::MySuperType>,
}
}
pub mod responses {
use serde::{Deserialize, Serialize};
#[doc = "Answer for registration confirmation"]
#[derive(Debug, Serialize, Deserialize, Eq, PartialEq, Hash)]
#[derive(Debug, Serialize, Deserialize)]
pub struct RegisterConfirmationFailed {
pub error: RegisterConfirmationFailedError,
}
#[derive(Debug, Serialize, Deserialize, Eq, PartialEq, Hash)]
#[derive(Debug, Serialize, Deserialize)]
pub enum RegisterConfirmationFailedError {
#[serde(rename = "code_invalid_or_expired")]
CodeInvalidOrExpired,
Expand All @@ -74,7 +93,7 @@ pub mod components {
InvalidForm,
}
#[doc = "Registration link sent to email, now user can find out when the link expires"]
#[derive(Debug, Serialize, Deserialize, Eq, PartialEq, Hash)]
#[derive(Debug, Serialize, Deserialize)]
pub struct RegistrationRequestCreated {
#[doc = "UTC Unix TimeStamp when the link expires"]
#[serde(rename = "expiresAt")]
Expand Down
83 changes: 81 additions & 2 deletions cargo-swagg/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use printer::{
api::{ApiModule, ApiStruct, BindApiMethod, HttpMethod, ImplApiMethods},
components::{
request_bodies::RequestBodiesModule, responses::ResponsesModule, Component, ComponentsModule, EnumVariant,
Field, FieldType, FormatInteger, NativeType,
Field, FieldType, FormatFloat, FormatInteger, FormatString, NativeType,
},
paths::{ContentType, Path, PathsModule, ResponseEnum, ResponseStatus, StatusVariant},
GeneratedModule, Printable,
Expand Down Expand Up @@ -94,7 +94,86 @@ fn main() -> Result<(), Box<dyn std::error::Error + 'static>> {
},
],
},
request_bodies: RequestBodiesModule {},
request_bodies: RequestBodiesModule {
list: vec![
Component::Object {
name: "Register".to_owned(),
description: None,
fields: vec![
Field {
name: "email".to_owned(),
required: true,
description: None,
field_type: FieldType::Native(NativeType::String {
format: FormatString::Email,
}),
},
Field {
name: "demo".to_owned(),
required: false,
description: None,
field_type: FieldType::Array(Box::new(FieldType::Array(Box::new(FieldType::Native(
NativeType::String {
format: FormatString::Email,
},
))))),
},
],
},
Component::Object {
name: "RegisterConfirmation".to_owned(),
description: None,
fields: vec![
Field {
name: "confirmationCode".to_owned(),
required: true,
description: None,
field_type: FieldType::Native(NativeType::String {
format: FormatString::default(),
}),
},
Field {
name: "firstName".to_owned(),
required: true,
description: None,
field_type: FieldType::Native(NativeType::String {
format: FormatString::default(),
}),
},
Field {
name: "lastName".to_owned(),
required: true,
description: None,
field_type: FieldType::Native(NativeType::String {
format: FormatString::default(),
}),
},
Field {
name: "password".to_owned(),
required: true,
description: None,
field_type: FieldType::Native(NativeType::String {
format: FormatString::default(),
}),
},
Field {
name: "demo".to_owned(),
required: false,
description: None,
field_type: FieldType::Native(NativeType::Float {
format: FormatFloat::default(),
}),
},
Field {
name: "customizer".to_owned(),
required: false,
description: None,
field_type: FieldType::Internal("crate::app::MySuperType".to_owned()),
},
],
},
],
},
};

let p1 = Path {
Expand Down
13 changes: 11 additions & 2 deletions cargo-swagg/src/printer/components/request_bodies.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,23 @@
pub use module::*;

pub mod module {
use super::super::Component;
use crate::printer::Printable;
use quote::quote;
pub struct RequestBodiesModule {}
pub struct RequestBodiesModule {
pub list: Vec<Component>,
}

impl Printable for RequestBodiesModule {
fn print(&self) -> proc_macro2::TokenStream {
let components = self.list.print();

quote! {
pub mod request_bodies {}
pub mod request_bodies {
use serde::{Serialize, Deserialize};

#components
}
}
}
}
Expand Down

0 comments on commit d919840

Please sign in to comment.