1#![cfg(feature = "rocket")]
2
3use rocket::http::Method;
4use rocket::response::content::RawHtml;
5use rocket::route::{Handler, Outcome};
6use rocket::{Data, Request, Route};
7
8use crate::{Redoc, Spec};
9
10impl<S: Spec> From<Redoc<S>> for Vec<Route> {
11 fn from(value: Redoc<S>) -> Self {
12 vec![Route::new(
13 Method::Get,
14 value.url.as_ref(),
15 RedocHandler(value.to_html()),
16 )]
17 }
18}
19
20#[derive(Clone)]
21struct RedocHandler(String);
22
23#[rocket::async_trait]
24impl Handler for RedocHandler {
25 async fn handle<'r>(&self, request: &'r Request<'_>, _: Data<'r>) -> Outcome<'r> {
26 Outcome::from(request, RawHtml(self.0.clone()))
27 }
28}