6 releases

0.1.5 Mar 21, 2021
0.1.4 Mar 21, 2021

#1907 in Parser implementations

Download history 66/week @ 2024-07-19 51/week @ 2024-07-26 41/week @ 2024-08-02 37/week @ 2024-08-09 24/week @ 2024-08-16 23/week @ 2024-08-23 28/week @ 2024-08-30 33/week @ 2024-09-06 102/week @ 2024-09-13 72/week @ 2024-09-20 37/week @ 2024-09-27 15/week @ 2024-10-04 31/week @ 2024-10-11 32/week @ 2024-10-18 26/week @ 2024-10-25 60/week @ 2024-11-01

150 downloads per month
Used in 3 crates (2 directly)

MIT license

2MB
165 lines

swagger-ui

Swagger-ui is a crate to use in rust web-servers to render OpenAPI specification, using swagger-ui JS library.

This crate downloads swagger-ui-dist from npm during build and embeds it into your binary, using rust-embed.

It also provides bindings for rocket.

swagger-ui petstore

Usage

Rocket

Use this crate with rocket to serve swagger-ui for your OpenAPI specification.

Use rocket feature in your Cargo.toml:

swagger-ui = { version = "0.1", features = ["rocket"] }

Or install rocket-swagger-ui:

swagger-ui = "0.1"
rocket-swagger-ui = "0.1"

See rocket-swagger-ui/examples/basic.rs for a full example:

#![feature(proc_macro_hygiene, decl_macro)]

extern crate rocket;

use rocket_swagger_ui;
use swagger_ui;

fn main() {
    rocket::ignite()
        .mount("/api/v1/swagger/",
               rocket_swagger_ui::routes(
                   // Specify file with openapi specification,
                   // relative to current file
                   swagger_ui::swagger_spec_file!("./openapi.json"),
                   swagger_ui::Config { ..Default::default() }
               )
        )
        .launch();
}

Standalone

This library isn't really useful without webserver bindings. You can get files from swagger-ui-dist and create configuration for swagger-ui, which can be serialized to json via serde.

See ../swagger-ui/examples/basic.rs for a full example:

use swagger_ui::{Assets, Config, Spec, DefaultModelRendering, DocExpansion, Filter, swagger_spec_file};

fn main() {
    println!("swagger-ui bundles files:");
    // Use Assets::iter() to get iterator of all filenames
    for file in Assets::iter() {
        let filename = file.as_ref();
        println!("\t{}", filename);
        // `Assets::get(filename)` returns file content
    };

    // Load openapi spec (compile-time)
    let _spec: Spec = swagger_spec_file!("./openapi.json");

    // swagger-ui configuration struct
    let _config: Config = Config {
        url: "".to_string(),
        urls: vec![],
        deep_linking: false,
        display_operation_id: false,
        default_models_expand_depth: 0,
        default_model_expand_depth: 0,
        default_model_rendering: DefaultModelRendering::Example,
        display_request_duration: false,
        doc_expansion: DocExpansion::List,
        filter: Filter::Bool(false),
        max_displayed_tags: 0,
        show_extensions: false,
        show_common_extensions: false
    };
}

Dependencies

~2–11MB
~100K SLoC