Crates.io | scalar-doc |
lib.rs | scalar-doc |
version | 0.1.0 |
source | src |
created_at | 2024-08-27 18:18:10.146665 |
updated_at | 2024-08-27 18:18:10.146665 |
description | An HTTP API documentation generator for Rust that doesn't care about which HTTP framework yo use. |
homepage | https://github.com/Courtcircuits/scalar-doc.rs |
repository | https://github.com/Courtcircuits/scalar-doc.rs |
max_upload_size | |
id | 1353699 |
size | 7,826 |
An HTTP API documentation generator for Rust that doesn't care about which HTTP framework yo use.
To use this crate, add it to your Cargo.toml
with :
cargo add scalar_doc
Also, you will need to expose your OpenAPI schema as an HTTP endpoint since it's too complicated to find the path of the schema file (it's an open issue though so I would be really happy if you contribute it).
use axum::{routing::get, Router};
use scalar_doc::Documentation;
async fn doc() -> String {
Documentation::new("Api Documentation title", "/openapi")
.build()
.unwrap()
}
async fn openapi() -> &'static str {
include_str!("openapi.json")
}
#[tokio::main]
async fn main() {
println!("Hello, world!");
let app = Router::new()
.route("/", get(doc))
.route("/openapi", get(openapi));
let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await.unwrap();
axum::serve(listener, app).await.unwrap();
}
To use scalar-doc
with actix
, you will need to activate the actix
feature in your Cargo.toml
file.
cargo add scalar-doc -F actix
use actix_web::{get, App, HttpResponse, HttpServer, Responder};
use scalar_doc::scalar_actix::ActixDocumentation;
#[get("/")]
async fn doc() -> impl Responder {
ActixDocumentation::new("Api Documentation title", "/openapi")
.theme(scalar_doc::Theme::Kepler)
.service()
}
#[get("/openapi")]
async fn openapi() -> impl Responder {
let open = include_str!("openapi.json");
HttpResponse::Ok().body(open)
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| App::new().service(doc).service(openapi))
.bind(("127.0.0.1", 8080))?
.run()
.await
}
Check out the examples for more show cases.