add swagger ui

This commit is contained in:
stubbfelnewpc
2020-06-27 01:20:48 +02:00
parent 7b3d598e3a
commit a43713a115
3 changed files with 165 additions and 16 deletions

134
Cargo.lock generated
View File

@@ -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"

View File

@@ -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"

View File

@@ -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();
}