Skip to content

Commit e4df968

Browse files
Update Server Doctest, README.md and version
1 parent ceabdf9 commit e4df968

File tree

4 files changed

+45
-15
lines changed

4 files changed

+45
-15
lines changed

Cargo.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "krustie"
3-
version = "0.1.4"
3+
version = "0.1.5"
44
authors = ["Emre Can Corapci"]
55
description = "A simple HTTP server"
66
homepage = "https://github.com/emrecancorapci/krustie"

README.md

+22-8
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ It is a hobby project and is intended to be a learning experience for me. I am n
1212
- [x] Router Middleware support
1313
- [x] Static file serving
1414
- [x] Compression (gzip)
15+
- [x] JSON parsing (Thanks to [serde_json](https://github.com/serde-rs/json))
1516

1617
## Getting Started
1718

@@ -26,7 +27,7 @@ It is a hobby project and is intended to be a learning experience for me. I am n
2627

2728
```toml
2829
[dependencies]
29-
krustie = "0.1.4"
30+
krustie = "0.1.5"
3031
```
3132

3233
or use `cargo add` in your terminal:
@@ -43,7 +44,9 @@ use krustie::{
4344
router::{ Router, methods::Endpoints },
4445
response::{ HttpResponse, StatusCode },
4546
request::HttpRequest,
46-
middleware::{ MiddlewareHandler, Middleware, gzip::Gzip } };
47+
middleware::{ MiddlewareHandler, Middleware, gzip::Gzip },
48+
json::{ json, get_string_from_json },
49+
};
4750
use std::collections::HashMap;
4851
use std::net::Ipv4Addr;
4952

@@ -62,19 +65,31 @@ fn main() {
6265

6366
sub_router
6467
.get(|_, res| {
65-
res.status(StatusCode::Ok);
68+
let body = json!({"message": "Hello, World!"});
69+
res.status(StatusCode::Ok).json_body(body);
6670
})
67-
.post(|_, res| {
68-
res.status(StatusCode::try_from(418).unwrap());
69-
});
71+
.post(post_req);
7072

7173
router.use_router("home", sub_router);
7274

7375
server.use_handler(router);
7476
server.use_handler(AddKrustieHeader);
7577
server.use_handler(Gzip);
78+
}
7679

77-
server.listen();
80+
fn post_req(req: &HttpRequest, res: &mut HttpResponse) {
81+
match req.get_body_as_json() {
82+
Ok(body) => {
83+
if get_string_from_json(body.get("server")).unwrap() == "Krustie" {
84+
res.status(StatusCode::Ok).json_body(body);
85+
} else {
86+
res.status(StatusCode::try_from(201).unwrap()).json_body(json!({"error": "Invalid server"}));
87+
}
88+
}
89+
Err(_) => {
90+
res.status(StatusCode::BadRequest).json_body(json!({"error": "Invalid JSON"}));
91+
}
92+
}
7893
}
7994
```
8095

@@ -106,7 +121,6 @@ As an inexperienced developer contributions will be welcomed. Please open an iss
106121

107122
### Basic API Server Features
108123

109-
- [ ] JSON parsing
110124
- [ ] XML parsing
111125
- [ ] Query parameter parsing
112126
- [ ] Request validation

src/server.rs

+21-5
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ use crate::{
1515
/// router::{ Router, methods::Endpoints },
1616
/// response::{ HttpResponse, StatusCode },
1717
/// request::HttpRequest,
18-
/// middleware::{ MiddlewareHandler, Middleware, gzip::Gzip } };
18+
/// middleware::{ MiddlewareHandler, Middleware, gzip::Gzip },
19+
/// json::{ json, get_string_from_json },
20+
/// };
1921
/// use std::collections::HashMap;
2022
/// use std::net::Ipv4Addr;
2123
///
@@ -34,18 +36,32 @@ use crate::{
3436
///
3537
/// sub_router
3638
/// .get(|_, res| {
37-
/// res.status(StatusCode::Ok);
39+
/// let body = json!({"message": "Hello, World!"});
40+
/// res.status(StatusCode::Ok).json_body(body);
3841
/// })
39-
/// .post(|_, res| {
40-
/// res.status(StatusCode::try_from(201).unwrap());
41-
/// });
42+
/// .post(post_req);
4243
///
4344
/// router.use_router("home", sub_router);
4445
///
4546
/// server.use_handler(router);
4647
/// server.use_handler(AddKrustieHeader);
4748
/// server.use_handler(Gzip);
4849
/// }
50+
///
51+
/// fn post_req(req: &HttpRequest, res: &mut HttpResponse) {
52+
/// match req.get_body_as_json() {
53+
/// Ok(body) => {
54+
/// if get_string_from_json(body.get("server")).unwrap() == "Krustie" {
55+
/// res.status(StatusCode::Ok).json_body(body);
56+
/// } else {
57+
/// res.status(StatusCode::try_from(201).unwrap()).json_body(json!({"error": "Invalid server"}));
58+
/// }
59+
/// }
60+
/// Err(_) => {
61+
/// res.status(StatusCode::BadRequest).json_body(json!({"error": "Invalid JSON"}));
62+
/// }
63+
/// }
64+
/// }
4965
/// ```
5066
pub struct Server {
5167
request_handlers: Vec<Box<dyn Handler>>,

0 commit comments

Comments
 (0)