add swagger ui
This commit is contained in:
134
Cargo.lock
generated
134
Cargo.lock
generated
@@ -189,7 +189,7 @@ dependencies = [
|
||||
"ansi_term",
|
||||
"atty",
|
||||
"bitflags",
|
||||
"strsim",
|
||||
"strsim 0.8.0",
|
||||
"textwrap",
|
||||
"unicode-width",
|
||||
"vec_map",
|
||||
@@ -238,6 +238,41 @@ dependencies = [
|
||||
"subtle 1.0.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling"
|
||||
version = "0.10.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858"
|
||||
dependencies = [
|
||||
"darling_core",
|
||||
"darling_macro",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling_core"
|
||||
version = "0.10.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b"
|
||||
dependencies = [
|
||||
"fnv",
|
||||
"ident_case",
|
||||
"proc-macro2 1.0.18",
|
||||
"quote 1.0.7",
|
||||
"strsim 0.9.3",
|
||||
"syn 1.0.33",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling_macro"
|
||||
version = "0.10.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
|
||||
dependencies = [
|
||||
"darling_core",
|
||||
"quote 1.0.7",
|
||||
"syn 1.0.33",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "devise"
|
||||
version = "0.2.0"
|
||||
@@ -318,6 +353,12 @@ dependencies = [
|
||||
"winapi 0.3.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fnv"
|
||||
version = "1.0.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
||||
|
||||
[[package]]
|
||||
name = "fsevent"
|
||||
version = "0.4.0"
|
||||
@@ -442,6 +483,12 @@ dependencies = [
|
||||
"url",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ident_case"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
|
||||
|
||||
[[package]]
|
||||
name = "idna"
|
||||
version = "0.1.5"
|
||||
@@ -636,8 +683,11 @@ dependencies = [
|
||||
name = "nixideserver_cli"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"okapi",
|
||||
"rocket",
|
||||
"rocket_contrib",
|
||||
"rocket_okapi",
|
||||
"schemars",
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"serde_json",
|
||||
@@ -671,6 +721,17 @@ dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "okapi"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e969ac53c86c158761836e746be203f4cfd774445bd8aff4bfdcf8e42dd93891"
|
||||
dependencies = [
|
||||
"schemars",
|
||||
"serde",
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "opaque-debug"
|
||||
version = "0.2.3"
|
||||
@@ -887,6 +948,34 @@ dependencies = [
|
||||
"unicode-xid 0.1.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rocket_okapi"
|
||||
version = "0.5.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cf633b45fd1c03ed4e4da824d9fafbecab8af298e46716ab0cf446fdf36c58b2"
|
||||
dependencies = [
|
||||
"okapi",
|
||||
"rocket",
|
||||
"rocket_contrib",
|
||||
"rocket_okapi_codegen",
|
||||
"schemars",
|
||||
"serde",
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rocket_okapi_codegen"
|
||||
version = "0.5.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b630c92ffa097a6425262547732e6bc19d80a24628d209126bd52c65acd96490"
|
||||
dependencies = [
|
||||
"darling",
|
||||
"proc-macro2 1.0.18",
|
||||
"quote 1.0.7",
|
||||
"rocket_http",
|
||||
"syn 1.0.33",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rust-argon2"
|
||||
version = "0.7.0"
|
||||
@@ -920,11 +1009,37 @@ dependencies = [
|
||||
"winapi-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "schemars"
|
||||
version = "0.7.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "be77ed66abed6954aabf6a3e31a84706bedbf93750d267e92ef4a6d90bbd6a61"
|
||||
dependencies = [
|
||||
"schemars_derive",
|
||||
"serde",
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "schemars_derive"
|
||||
version = "0.7.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "11af7a475c9ee266cfaa9e303a47c830ebe072bf3101ab907a7b7b9d816fa01d"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.18",
|
||||
"quote 1.0.7",
|
||||
"serde_derive_internals",
|
||||
"syn 1.0.33",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.114"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5317f7588f0a5078ee60ef675ef96735a1442132dc645eb1d12c018620ed8cd3"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
@@ -937,6 +1052,17 @@ dependencies = [
|
||||
"syn 1.0.33",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive_internals"
|
||||
version = "0.25.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1dbab34ca63057a1f15280bdf3c39f2b1eb1b54c17e98360e511637aef7418c6"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.18",
|
||||
"quote 1.0.7",
|
||||
"syn 1.0.33",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.55"
|
||||
@@ -993,6 +1119,12 @@ version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
|
||||
|
||||
[[package]]
|
||||
name = "strsim"
|
||||
version = "0.9.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
|
||||
|
||||
[[package]]
|
||||
name = "subtle"
|
||||
version = "1.0.0"
|
||||
|
||||
@@ -12,3 +12,6 @@ rocket_contrib = "0.4.5"
|
||||
serde = "1.0"
|
||||
serde_json = "1.0"
|
||||
serde_derive = "1.0"
|
||||
rocket_okapi = "0.5.1"
|
||||
schemars = "0.7.6"
|
||||
okapi = "0.4.0"
|
||||
@@ -1,18 +1,25 @@
|
||||
#![feature(proc_macro_hygiene, decl_macro)]
|
||||
#[macro_use] extern crate rocket;
|
||||
#[macro_use] extern crate serde_derive;
|
||||
#[macro_use] extern crate rocket_okapi;
|
||||
|
||||
use rocket::response::status;
|
||||
use schemars::JsonSchema;
|
||||
use rocket_okapi::swagger_ui::*;
|
||||
use rocket::{
|
||||
State,
|
||||
response::status
|
||||
};
|
||||
use rocket_contrib::json::Json;
|
||||
|
||||
|
||||
use std::collections::hash_map::DefaultHasher;
|
||||
use std::hash::{Hash, Hasher};
|
||||
use std::hash::{
|
||||
Hash,
|
||||
Hasher
|
||||
};
|
||||
|
||||
|
||||
// podman create --name test -p 3000:3000 -v $PWD:/nixide -w /nixide docker.io/nixos/nix nix-shell --pure start-ide.nix --run run_ide.sh
|
||||
|
||||
#[derive(Serialize, Deserialize, Hash)]
|
||||
#[derive(Serialize, Deserialize, Hash, JsonSchema)]
|
||||
pub struct OpenGitParam
|
||||
{
|
||||
inquirer: String,
|
||||
@@ -20,7 +27,7 @@ pub struct OpenGitParam
|
||||
ref_name: String
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Hash)]
|
||||
#[derive(Serialize, Deserialize, Hash, JsonSchema)]
|
||||
pub struct IdeState
|
||||
{
|
||||
ide_id: String,
|
||||
@@ -87,7 +94,7 @@ fn default_working_folder() -> String {
|
||||
"$PWD".to_owned()
|
||||
}
|
||||
|
||||
|
||||
#[openapi]
|
||||
#[get("/open/<inquirer>/git?<clone_url>&<ref_name>")]
|
||||
fn v1_open_inquirer_git(inquirer: String, clone_url: String, ref_name: String) -> status::Accepted<Json<IdeState>> {
|
||||
let param = OpenGitParam {
|
||||
@@ -124,7 +131,8 @@ fn v1_open_inquirer_git(inquirer: String, clone_url: String, ref_name: String) -
|
||||
)
|
||||
)
|
||||
}
|
||||
use rocket::State;
|
||||
|
||||
#[openapi]
|
||||
#[get("/state/<ide_ide>")]
|
||||
fn v1_ide_state(ide_ide: String, c : State<NixIdeManageService>) -> status::Accepted<Json<IdeState>>
|
||||
{
|
||||
@@ -140,6 +148,7 @@ fn v1_ide_state(ide_ide: String, c : State<NixIdeManageService>) -> status::Acce
|
||||
)
|
||||
}
|
||||
|
||||
#[openapi]
|
||||
#[get("/open/<inquirer>/gitea?<clone_url>&<ref_name>")]
|
||||
fn v1_open_inquirer_gitea(inquirer: String, clone_url: String, ref_name: String) -> status::Accepted<Json<OpenGitParam>> {
|
||||
let param = OpenGitParam {
|
||||
@@ -150,6 +159,7 @@ fn v1_open_inquirer_gitea(inquirer: String, clone_url: String, ref_name: String)
|
||||
status::Accepted(Some(Json(param)))
|
||||
}
|
||||
|
||||
#[openapi]
|
||||
#[get("/open/<inquirer>/gitlab?<clone_url>&<ref_name>")]
|
||||
fn v1_open_inquirer_gitlab(inquirer: String, clone_url: String, ref_name: String) -> status::Accepted<Json<OpenGitParam>> {
|
||||
let param = OpenGitParam {
|
||||
@@ -160,6 +170,7 @@ fn v1_open_inquirer_gitlab(inquirer: String, clone_url: String, ref_name: String
|
||||
status::Accepted(Some(Json(param)))
|
||||
}
|
||||
|
||||
#[openapi]
|
||||
#[get("/open/<inquirer>/github?<clone_url>&<ref_name>")]
|
||||
fn v1_open_inquirer_github(inquirer: String, clone_url: String, ref_name: String) -> status::Accepted<Json<OpenGitParam>> {
|
||||
let param = OpenGitParam {
|
||||
@@ -170,6 +181,7 @@ fn v1_open_inquirer_github(inquirer: String, clone_url: String, ref_name: String
|
||||
status::Accepted(Some(Json(param)))
|
||||
}
|
||||
|
||||
#[openapi]
|
||||
#[get("/open/gitlab?<clone_url>&<ref_name>")]
|
||||
fn v1_open_gitlab(clone_url: String, ref_name: String) -> status::Accepted<Json<OpenGitParam>> {
|
||||
let param = OpenGitParam {
|
||||
@@ -180,13 +192,11 @@ fn v1_open_gitlab(clone_url: String, ref_name: String) -> status::Accepted<Json<
|
||||
status::Accepted(Some(Json(param)))
|
||||
}
|
||||
|
||||
use rocket::fairing::AdHoc;
|
||||
|
||||
fn main() {
|
||||
let eng = DummyEngine{};
|
||||
let exectuor = NixIdeManageService{eng:Box::new(eng)};
|
||||
rocket::ignite()
|
||||
.mount("/api/v1/", routes![
|
||||
.mount("/api/v1/", routes_with_openapi![
|
||||
v1_open_inquirer_git,
|
||||
v1_open_inquirer_gitea,
|
||||
v1_open_gitlab,
|
||||
@@ -195,8 +205,12 @@ fn main() {
|
||||
v1_ide_state
|
||||
])
|
||||
.manage(exectuor)
|
||||
.attach(AdHoc::on_launch("Launch Printer", |_| {
|
||||
println!("Rocket is about to launch! Exciting! Here we go...");
|
||||
}))
|
||||
.mount(
|
||||
"/swagger-ui/",
|
||||
make_swagger_ui(&SwaggerUIConfig {
|
||||
url: "/api/v1/openapi.json".to_owned(),
|
||||
..Default::default()
|
||||
}),
|
||||
)
|
||||
.launch();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user