# swagger-ui Swagger-ui is a crate to use in rust web-servers to render OpenAPI specification, using [swagger-ui JS library](https://www.npmjs.com/package/swagger-ui). This crate downloads [swagger-ui-dist](https://www.npmjs.com/package/swagger-ui-dist) from npm during build and embeds it into your binary, using [rust-embed](https://crates.io/crates/rust-embed). It also provides bindings for [rocket](https://rocket.rs). ![swagger-ui petstore](https://github.com/kotborealis/swagger-ui/blob/master/doc/swagger-ui.png?raw=true) ## Usage ### Rocket Use this crate with rocket to serve `swagger-ui` for your OpenAPI specification. Use `rocket` feature in your `Cargo.toml`: ```toml swagger-ui = { version = "0.1", features = ["rocket"] } ``` Or install `rocket-swagger-ui`: ```toml swagger-ui = "0.1" rocket-swagger-ui = "0.1" ``` See [rocket-swagger-ui/examples/basic.rs](../rocket-swagger-ui/examples/basic.rs) for a full example: ```rust #![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](https://docs.rs/serde/). See [../swagger-ui/examples/basic.rs](../swagger-ui/examples/basic.rs) for a full example: ```rust 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 }; } ```