6 releases

0.1.5 Mar 21, 2021
0.1.4 Mar 21, 2021

#2456 in Web programming

Download history 42/week @ 2024-03-11 53/week @ 2024-03-18 68/week @ 2024-03-25 165/week @ 2024-04-01 107/week @ 2024-04-08 40/week @ 2024-04-15 66/week @ 2024-04-22 83/week @ 2024-04-29 72/week @ 2024-05-06 53/week @ 2024-05-13 49/week @ 2024-05-20 130/week @ 2024-05-27 69/week @ 2024-06-03 130/week @ 2024-06-10 83/week @ 2024-06-17 56/week @ 2024-06-24

359 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

~3–13MB
~122K SLoC