Skip to content

Commit 2aab269

Browse files
committed
Implement /chat route
1 parent 6e00ec7 commit 2aab269

3 files changed

Lines changed: 108 additions & 3 deletions

File tree

Cargo.lock

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

crates/server/Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,6 @@ version = "0.1.0"
44
edition = "2021"
55

66
[dependencies]
7-
miniserve = { path = "../miniserve" }
7+
miniserve = { path = "../miniserve" }
8+
serde = { workspace = true, features = ["derive"] }
9+
serde_json = "1.0.121"

crates/server/src/main.rs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,32 @@
1-
use miniserve::{Content, Request, Response};
1+
use miniserve::{http::StatusCode, Content, Request, Response};
2+
use serde::{Deserialize, Serialize};
23

34
fn index(_req: Request) -> Response {
45
let content = include_str!("../index.html").to_string();
56
Ok(Content::Html(content))
67
}
78

9+
#[derive(Serialize, Deserialize)]
10+
struct Messages {
11+
messages: Vec<String>,
12+
}
13+
14+
fn chat(req: Request) -> Response {
15+
let Request::Post(body) = req else {
16+
return Err(StatusCode::METHOD_NOT_ALLOWED);
17+
};
18+
let Ok(mut messages) = serde_json::from_str::<Messages>(&body) else {
19+
return Err(StatusCode::INTERNAL_SERVER_ERROR);
20+
};
21+
messages
22+
.messages
23+
.push("And how does that make you feel?".into());
24+
Ok(Content::Json(serde_json::to_string(&messages).unwrap()))
25+
}
26+
827
fn main() {
9-
miniserve::Server::new().route("/", index).run()
28+
miniserve::Server::new()
29+
.route("/", index)
30+
.route("/chat", chat)
31+
.run()
1032
}

0 commit comments

Comments
 (0)