Skip to content

MikhailWahib/xpress

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

30 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Xpress: A Lightweight HTTP Framework for Rust.

Xpress is a minimalistic, HTTP framework built from scratch in Rust. It aims to demonstrate the inner workings of web frameworks by implementing core features like routing, request parsing, and response handling in a simple yet extensible way.

Note: This project is not intended for production use. It is designed to be a simple example of how an HTTP framework could be built from scratch in Rust, and should not be used in production environments.


πŸš€ Features

  • Routing: Support for GET, POST, PUT, and DELETE methods.
  • Request Handling: Parse HTTP requests and extract information seamlessly.
  • Response Management: Send JSON, HTML, or plain text responses with ease.
  • Thread Pooling: Handle multiple client connections concurrently using a thread pool.
  • Error Handling: Custom error handling for robust and maintainable code.
  • Educational Design: Clear and commented implementation for learning purposes.

πŸ“¦ Installation

Add Xpress to your project by including it in your Cargo.toml:

[dependencies]
xpress = "0.1.3"

πŸ› οΈ Usage

Here's a quick example to get started with Xpress:

use serde::{Deserialize, Serialize};
use std::sync::{Arc, Mutex};
use xpress::Xpress;

#[derive(Serialize, Deserialize, Clone)]
struct User {
    name: String,
    age: u8,
    email: String,
}

fn main() {
    let mut app = Xpress::new("127.0.0.1:8080");

    let state = Arc::new(Mutex::new(Vec::new()));

    // Define routes
    app.get("/", |_req, res| res.html("hello.html").unwrap());

    let users_state = Arc::clone(&state);
    app.get("/users", move |_req, res| {
        let users = users_state.lock().unwrap();
        res.json(&*users).unwrap();
    });

    app.listen();
}

πŸ§‘β€πŸ’» Contributing

Contributions are welcome! Feel free to submit issues or pull requests to improve functionality, fix bugs, or add examples.


πŸ“œ License

This project is licensed under the MIT License.


Releases

No releases published

Packages

No packages published

Languages