rweb 0.15.0

Yet another web server framework for rust
Documentation
#![cfg(feature = "openapi")]

use rweb::*;
use serde::{Deserialize, Serialize};

#[derive(Debug, Deserialize, Serialize, Schema)]
#[schema(component = "Bar")]
pub struct Bar {
    pub foo: Box<Foo>,
}

#[derive(Debug, Deserialize, Serialize, Schema)]
pub struct NotAComponent {
    pub foo: Box<Foo>,
    pub bar: Vec<Bar>,
}

#[derive(Debug, Deserialize, Serialize, Schema)]
#[schema(component = "Foo")]
pub struct Foo {
    pub interim: Option<Box<NotAComponent>>,
}

#[get("/")]
fn test_r(_: Json<Foo>) -> String {
    String::new()
}

#[test]
fn test_component_recursion_compile() {
    let (spec, _) = openapi::spec().build(|| test_r());
    let schemas = &spec.components.as_ref().unwrap().schemas;
    println!("{}", serde_yaml::to_string(&schemas).unwrap());
    for (name, _) in schemas {
        assert!(name
            .chars()
            .all(|c| c.is_alphanumeric() || c == '.' || c == '_' || c == '-'))
    }
    assert!(schemas.contains_key("Foo"));
    assert!(schemas.contains_key("Bar"));
    assert!(!schemas.contains_key("NotAComponent"));
}