aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.zed/tasks.json34
-rw-r--r--Cargo.toml14
-rw-r--r--src/main.rs26
-rw-r--r--src/routers/account.rs17
-rw-r--r--src/routers/mod.rs15
5 files changed, 106 insertions, 0 deletions
diff --git a/.zed/tasks.json b/.zed/tasks.json
new file mode 100644
index 0000000..4648b2c
--- /dev/null
+++ b/.zed/tasks.json
@@ -0,0 +1,34 @@
1[
2 {
3 "label": "Run release server",
4 "command": "cargo",
5 "args": ["run", "-r"],
6
7 "env": {
8 "SERVER_BIND": "0.0.0.0:8080"
9 },
10
11 "use_new_terminal": false,
12 "allow_concurrent_runs": false,
13 "reveal": "no_focus",
14 "reveal_target": "dock",
15 "hide": "never",
16 "shell": "system"
17 },
18 {
19 "label": "Run debug server",
20 "command": "cargo",
21 "args": ["run"],
22
23 "env": {
24 "SERVER_BIND": "0.0.0.0:8080"
25 },
26
27 "use_new_terminal": false,
28 "allow_concurrent_runs": false,
29 "reveal": "no_focus",
30 "reveal_target": "dock",
31 "hide": "never",
32 "shell": "system"
33 }
34]
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..bd321fd
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,14 @@
1[package]
2name = "itmo_queue_server"
3version = "0.1.0"
4edition = "2024"
5
6[dependencies]
7axum = "0.8.4"
8serde = { version = "1.0.219", features = ["derive"] }
9serde_json = "1.0.143"
10tokio = { version = "1.47.1", features = ["macros", "rt-multi-thread"] }
11tower = "0.5.2"
12tower-http = { version = "0.6.6", features = ["trace"] }
13tracing = "0.1.41"
14tracing-subscriber = "0.3.19"
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..ff04b57
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,26 @@
1mod routers;
2
3use tokio::net::TcpListener;
4use tracing::{Level, info};
5
6async fn listener() -> TcpListener {
7 let addr = std::env::var("SERVER_BIND").expect("SERVER_BIND must be set");
8 TcpListener::bind(addr).await.unwrap()
9}
10
11#[tokio::main]
12async fn main() {
13 tracing_subscriber::fmt()
14 .with_max_level(Level::DEBUG)
15 .init();
16
17 let router = routers::router();
18 let listener = listener().await;
19
20 info!(
21 "Start listening server on http://{:?}",
22 listener.local_addr().unwrap()
23 );
24
25 axum::serve(listener, router).await.unwrap();
26}
diff --git a/src/routers/account.rs b/src/routers/account.rs
new file mode 100644
index 0000000..e8c9753
--- /dev/null
+++ b/src/routers/account.rs
@@ -0,0 +1,17 @@
1use axum::Router;
2use axum::response::IntoResponse;
3use axum::routing::{get, post};
4
5pub(crate) fn router() -> Router {
6 Router::new()
7 .route("/me", get(me))
8 .route("/login", post(login))
9}
10
11async fn me() -> impl IntoResponse {
12 "Me"
13}
14
15async fn login() -> impl IntoResponse {
16 "Login"
17}
diff --git a/src/routers/mod.rs b/src/routers/mod.rs
new file mode 100644
index 0000000..ee925f0
--- /dev/null
+++ b/src/routers/mod.rs
@@ -0,0 +1,15 @@
1mod account;
2
3use axum::Router;
4use tower_http::trace::{DefaultOnRequest, DefaultOnResponse, TraceLayer};
5use tracing::Level;
6
7pub(crate) fn router() -> Router {
8 let trace_layer = TraceLayer::new_for_http()
9 .on_request(DefaultOnRequest::new().level(Level::INFO))
10 .on_response(DefaultOnResponse::new().level(Level::INFO));
11
12 Router::new()
13 .layer(trace_layer)
14 .nest("/account", account::router())
15}