Minha primeira lib
Esses dias atrás(domingo) tive a ideia de criar um framework web similar ao express.js, mas em rust para aprender como uma framework como esse funcionam.
Por enquanto ta uma bagunça o código e só da para criar rotas do tipo get e post, exemplo:
use milim_web::request::Method::*;
use milim_web::server;
fn main() {
// Cria uma instancia de App
let mut app = server();
app.route("/", Get, |req, res, ctx| {
// Obtem a query name se definida
let query = req.get_query("name").unwrap_or("".to_string());
res.body(&format!("Valor da query name e: {}", query));
});
// Cria uma rota dinamica com o parametro name
app.route("/:name", Get, |req, res, ctx| {
res.body(&format!(
"O valor de name e: {}",
req.get_param("name").unwrap_or("".to_string())
));
});
// Inicia o servidor Http na porta 3000
app.listen("127.0.0.1:3000")
}
Por enquanto o ctx ta de enfeite kkkk, também da para criar middlewares como:
pub struct Log;
impl Log {
fn new() -> Self {
Self
}
}
impl Middleware for Log {
// M1 -> M2 -> Handler -> M2 -> M1
fn on_request(&self, req: &mut HttpRequest, ctx: &Context) -> MwFlow {
println!("request method: {:?}", req.method);
MwFlow::Continue
}
fn on_response(&self, req: &HttpRequest, res: &mut HttpResponse, ctx: &Context) {
println!("Response body {:?}", res.body);
}
}
E adicionar a uma rota:
app.route_use("/", Get, mx![Log], |req, res, ctx| {
res.body("Hello World!!");
});
To usando somente std como parser, porque quero ver ate onde da para chegar somente com std sem comprometer a segurança da lib.
To planejando chegar ao menos a uma versão 1.0, vai dar muito trabalho mas vai dar para aprender muita coisa também, se quiserem dar feedbacks do que posso melhorar nela ou como posso criar posts mais claros para ficarem mais fáceis de entender.