1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//! A rust Web Framework for prototyping and small scale applications
//!
//! ## Simple Hello World HTTP server
//!
//! ```
//! use rambl_rs::{Context, HttpResponse, HttpServer, RequestType::Get, Responder};
//!
//! async fn index(res: Responder, _ctx: Context) {
//! res.respond("<h1>Hello World</h1>").await.unwrap();
//! }
//!
//! #[tokio::main]
//! async fn main() {
//! let server = HttpServer::new();
//!
//! server.on(Get, "/", index);
//!
//! server.listen("127.0.0.1:8000").await.unwrap();
//! }
//! ```
//!
//! This shows that some applications don't need alot of code, so we go for minimun boilerplate.
//!
//! ## Connection Counter
//!
//! ```
//! use rambl_rs::{Context, HttpServer, RequestType::Get, Responder};
//!
//! async fn index(res: Responder, ctx: Context<i32>) {
//! let mut guard = ctx.state.lock().await;
//! let counter = guard.as_mut().unwrap();
//!
//! *counter += 1;
//!
//! res.respond(
//! &format!("<h1>You are the {counter} person to view this content</h1>")
//! ).await.unwrap();
//! }
//!
//! #[tokio::main]
//! async fn main() {
//! let server = HttpServer::new();
//!
//! server.manage(0);
//! server.on(Get, "/", index);
//!
//! server.listen("127.0.0.1:8000").await.unwrap();
//! }
//! ```
//!
//! ## Real-Time application
//!
//! this is where rambl_rs shines.
//!
//! ```
//! use rambl_rs::RequestType::Post;
//! use rambl_rs::{Context, HttpServer, RequestType::Get, Responder};
//! use rambl_rs::{prelude::*, tokio, SSEResponse};
//! use tokio::sync::broadcast::{channel, Sender};
//! use std::sync::Arc;
//!
//! async fn messages(res: Responder, ctx: Context<Arc<Sender<String>>>) {
//! let mut rx = Arc::clone(&ctx.state.unwrap_ref()).subscribe();
//! let mut sse_res = SSEResponse::new();
//!
//! while let Ok(message) = rx.recv().await {
//! sse_res.body(message);
//! res.respond(&sse_res).await.unwrap();
//! }
//! }
//!
//! async fn send(res: Responder, ctx: Context<Arc<Sender<String>>>) {
//! let tx = Arc::clone(&ctx.state.unwrap_ref());
//! let message = ctx.request.body;
//!
//! res.respond("").await.unwrap();
//! let _ = tx.send(message);
//! }
//!
//! #[tokio::main]
//! async fn main() {
//! let server = HttpServer::new();
//! let (tx, _) = channel(1);
//!
//! server.manage(Arc::new(tx));
//! server.on(Get, "/messages", messages);
//! server.on(Post, "/send", send);
//!
//! server.listen("127.0.0.1:8000").await.unwrap();
//! }
//! ```
pub use *;
pub use *;
pub use *;
pub use tokio;