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.
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 for a full example:
```rust
extern crate rocket;
use rocketswaggerui; use swagger_ui;
fn main() { rocket::ignite() .mount("/api/v1/swagger/", rocketswaggerui::routes( // Specify file with openapi specification, // relative to current file swaggerui::swaggerspecfile!("./openapi.json"), swaggerui::Config { ..Default::default() } ) ) .launch(); } ```
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:
```rust use swaggerui::{Assets, Config, Spec, DefaultModelRendering, DocExpansion, Filter, swaggerspec_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
};
} ```