juiceback/routes/
api_doc.rs

1use utoipa::OpenApi;
2
3use crate::routes::admin::{AdminFileEntry, CheckResponse, LoginForm, LoginResponse};
4use crate::routes::manage::{FileInfoResponse, OwnedFilesRequest, OwnedFilesResponse, RenewResponse};
5use crate::routes::upload::UploadResponse;
6
7#[derive(OpenApi)]
8#[openapi(
9    info(
10        title = "Juicebox API",
11        description = "Public HTTP API for Juicebox file uploads. You can upload files, check their status, renew or delete them, and look up your owned files. Every endpoint returns JSON unless you send an Accept: text/html header, in which case some return HTML.",
12        version = "1.0.0",
13        license(name = "MIT"),
14    ),
15    servers(
16        (url = "/", description = "Relative to the server root"),
17    ),
18    paths(
19        crate::routes::upload::upload_handler,
20        crate::routes::manage::file_info_handler,
21        crate::routes::manage::delete_file_handler,
22        crate::routes::manage::renew_file_id_handler,
23        crate::routes::manage::owned_files_handler,
24        crate::routes::health_handler,
25        crate::routes::config_handler,
26        crate::routes::noscript::report_form_handler,
27        crate::routes::noscript::report_submit_handler,
28        crate::routes::noscript::feedback_submit_handler,
29    ),
30    components(schemas(
31        UploadResponse,
32        FileInfoResponse,
33        RenewResponse,
34        OwnedFilesRequest,
35        OwnedFilesResponse,
36        AdminFileEntry,
37        CheckResponse,
38        LoginForm,
39        LoginResponse,
40    )),
41    tags(
42        (name = "Uploads", description = "File upload endpoints"),
43        (name = "Files", description = "File management endpoints"),
44        (name = "Admin", description = "Admin panel endpoints"),
45        (name = "General", description = "General endpoints"),
46    ),
47)]
48pub struct ApiDoc;