diff --git a/Cargo.lock b/Cargo.lock index 14e293b..b31c979 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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" diff --git a/server/cli/Cargo.toml b/server/cli/Cargo.toml index b44bbf2..35a9ee0 100644 --- a/server/cli/Cargo.toml +++ b/server/cli/Cargo.toml @@ -11,4 +11,7 @@ rocket = "0.4.5" rocket_contrib = "0.4.5" serde = "1.0" serde_json = "1.0" -serde_derive = "1.0" \ No newline at end of file +serde_derive = "1.0" +rocket_okapi = "0.5.1" +schemars = "0.7.6" +okapi = "0.4.0" \ No newline at end of file diff --git a/server/cli/src/main.rs b/server/cli/src/main.rs index 6624879..5016e23 100644 --- a/server/cli/src/main.rs +++ b/server/cli/src/main.rs @@ -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//git?&")] fn v1_open_inquirer_git(inquirer: String, clone_url: String, ref_name: String) -> status::Accepted> { 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/")] fn v1_ide_state(ide_ide: String, c : State) -> status::Accepted> { @@ -140,6 +148,7 @@ fn v1_ide_state(ide_ide: String, c : State) -> status::Acce ) } +#[openapi] #[get("/open//gitea?&")] fn v1_open_inquirer_gitea(inquirer: String, clone_url: String, ref_name: String) -> status::Accepted> { 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//gitlab?&")] fn v1_open_inquirer_gitlab(inquirer: String, clone_url: String, ref_name: String) -> status::Accepted> { 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//github?&")] fn v1_open_inquirer_github(inquirer: String, clone_url: String, ref_name: String) -> status::Accepted> { 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?&")] fn v1_open_gitlab(clone_url: String, ref_name: String) -> status::Accepted> { let param = OpenGitParam { @@ -180,13 +192,11 @@ fn v1_open_gitlab(clone_url: String, ref_name: String) -> status::Accepted