#![cfg(feature = "openapi")] #![cfg(feature = "enumset")] use enumset::*; use rweb::*; use serde::{Deserialize, Serialize}; #[derive(EnumSetType, Schema, Serialize, Deserialize, Debug)] pub enum Flagged { A, B, C, } #[derive(EnumSetType, Schema, Serialize, Deserialize, Debug)] #[enumset(serialize_as_list)] pub enum Named { A, B, C, } #[derive(Schema, Serialize, Deserialize, Debug)] #[schema(component = "Components")] struct Components { flagged: EnumSet, named: EnumSet, } #[get("/")] fn index(_: Json) -> String { String::new() } #[test] fn description() { let (spec, _) = openapi::spec().build(|| { // index() }); let schemas = &spec.components.as_ref().unwrap().schemas; println!("{}", serde_yaml::to_string(&schemas).unwrap()); macro_rules! component { ($cn:expr) => { match schemas.get($cn) { Some(openapi::ObjectOrReference::Object(s)) => s, Some(..) => panic!("Component schema can't be a reference"), None => panic!("No component schema for {}", $cn), } }; } let components = component!("Components"); macro_rules! unpack { ($opt:expr) => { $opt.unwrap().unwrap().unwrap() }; } macro_rules! prop { ($prop:expr) => { unpack!(components.properties.get($prop)) }; } let flagged = prop!("flagged"); assert_eq!(flagged.schema_type, Some(openapi::Type::Integer)); let named = prop!("named"); assert_eq!(named.schema_type, Some(openapi::Type::Array)); assert!(named.items.is_some()); }