http_lolo 0.1.0

A simple, lightweight, single-threaded HTTP server with non-blocking I/O for concurrent operation handling
Documentation
# http_lolo

A simple, lightweight, single-threaded HTTP server with non-blocking I/O for concurrent operation handling.

## Features

- Single-threaded architecture with non-blocking I/O
- Concurrent request handling using epoll
- Simple and intuitive API for route handling
- Support for multiple server instances
- Customizable request and response handling

## Installation

Add this to your `Cargo.toml`:

```toml
[dependencies]
http_lolo = "0.1.0"
```

## Quick Start

```rust
use http_lolo::{HttpServer, Request, ResponseWriter};

fn main() {
    let server = HttpServer::new();

    server.handle_route("/", Box::new(|_: &mut Request, w: &mut ResponseWriter| {
        w.write_string("Hello, World!".to_string());
    }));

    server.listen_on("127.0.0.1:8080");

    HttpServer::run_all();
}
```

## Usage

### Creating a new server instance

```rust
let server = HttpServer::new();
```

### adding a route handler

```rust
server.handle_route("/", Box::new(|_: &mut Request, w: &mut ResponseWriter| {
    w.write_string("Hello, World!".to_string());
}));
```

### Starting the server

```rust
server.listen_on("127.0.0.1:8080");
HttpServer::run_all();
```

### Handling requests

Inside your route handler, you can access request data and write responses:

```rust
|req: &mut Request, resp: &mut ResponseWriter| {
    // Access request data
    println!("Method: {}", req.method);
    println!("Path: {}", req.path);

    // Write response
    resp.set_status(200);
    resp.write_string("Response content".to_string());
}
```

## Advanced Usage

### Multiple server instances

You can create multiple server instances listening on different ports:

```rust
let server1 = HttpServer::new();
let server2 = HttpServer::new();

// Add route handlers to server1 and server2

server1.listen_on("127.0.0.1:8080");
server2.listen_on("127.0.0.1:8081");

HttpServer::run_all();
```
### JSON responses

```rust
use http_lolo::JsonValue;

resp.write_json(json::object!{
    "key" => "value",
    "number" => 42
});
```
## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.