aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs26
-rw-r--r--src/routers/account.rs17
-rw-r--r--src/routers/mod.rs15
3 files changed, 58 insertions, 0 deletions
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}