Skip to content

Commit 01a47ab

Browse files
committed
initial commit
0 parents  commit 01a47ab

File tree

3 files changed

+86
-0
lines changed

3 files changed

+86
-0
lines changed

Cargo.lock

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
[package]
2+
name = "rust-api-gateway"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7+
8+
[dependencies]
9+
rocket = "0.5.0"
10+
rocket_codegen = "0.5.0"
11+
12+
[dependencies.rocket_contrib]
13+
version = "0.5.0"
14+
default-features = false
15+
features = ["json"]
16+
17+
[dependencies.rocket_macros]
18+
version = "0.5.0"

src/main.rs

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#![feature(proc_macro_hygiene, decl_macro)]
2+
3+
#[macro_use]
4+
extern crate rocket;
5+
6+
use rocket::{http::Method, response::Debug, State};
7+
8+
struct Service {
9+
name: String,
10+
url: String,
11+
}
12+
13+
#[get("/")]
14+
fn index() -> &'static str {
15+
"API Gateway"
16+
}
17+
18+
#[get("/services")]
19+
fn list_services(services: State<Vec<Service>>) -> Debug<Vec<Service>> {
20+
Debug(services.inner().clone())
21+
}
22+
23+
#[post("/services", data = "<service>")]
24+
fn add_service(service: rocket::request::Form<Service>, services: State<Vec<Service>>) -> String {
25+
let mut services = services.inner().clone();
26+
services.push(service.into_inner());
27+
"Service added".to_string()
28+
}
29+
30+
#[delete("/services/<name>")]
31+
fn remove_service(name: String, services: State<Vec<Service>>) -> String {
32+
let mut services = services.inner().clone();
33+
services.retain(|s| s.name != name);
34+
"Service removed".to_string()
35+
}
36+
37+
#[catch(404)]
38+
fn not_found() -> &'static str {
39+
"404 Not Found"
40+
}
41+
42+
fn main() {
43+
let services = vec![
44+
Service {
45+
name: "Service A".to_string(),
46+
url: "http://localhost:8000".to_string(),
47+
},
48+
Service {
49+
name: "Service B".to_string(),
50+
url: "http://localhost:9000".to_string(),
51+
},
52+
];
53+
rocket::ignite()
54+
.manage(services)
55+
.mount(
56+
"/",
57+
routes![index, list_services, add_service, remove_service],
58+
)
59+
.register(catchers![not_found])
60+
.launch();
61+
}

0 commit comments

Comments
 (0)