simple http library
Go to file
2025-01-26 01:10:53 +03:00
examples url root and ip now optional' 2025-01-26 01:10:53 +03:00
src url root and ip now optional' 2025-01-26 01:10:53 +03:00
.gitignore gitignore upd 2025-01-19 10:53:26 +03:00
Cargo.lock ver 0.2.2 2025-01-25 17:33:44 +03:00
Cargo.toml ver 0.2.2 2025-01-25 17:33:44 +03:00
LICENSE dyn Sendable instead of impl Sendable 2025-01-14 15:46:27 +03:00
README.md ver 0.2.2 2025-01-25 17:33:44 +03:00

EzHttp

Simple async http library with client and server

Setup

ezhttp = "0.2.2" # stable
ezhttp = { git = "https://git.meex.lol/MeexReay/ezhttp" } # unstable

Examples

Client example:

use ezhttp::prelude::*;

#[tokio::main]
async fn main() -> Result<(), HttpError> {
    let client = HttpClient::builder().build(); // or HttpClient::default() 

    let url = URL::from_str("https://google.com")?;
    let request: HttpRequest = RequestBuilder::get(url).build();

    let response: HttpResponse = client.send(request).await?;

    println!("response status: {}", response.status_code);
    println!("response body: {} bytes", response.body.as_text().unwrap().len());
    
    Ok(())
}

Site example:

use ezhttp::prelude::*;

struct EzSite(String);

impl HttpServer for EzSite {
    async fn on_request(&self, req: &HttpRequest) -> Option<HttpResponse> {
        println!("{} > {} {}", req.addr, req.method, req.url.to_path_string());

        if req.url.path == "/" {
            Some(HttpResponse::new(
                OK,                                                       // response status code
                Headers::from(vec![                                       // response headers
                    ("Content-Type", "text/html"),                        // - content type
                    ("Content-Length", self.0.len().to_string().as_str()) // - content length
                ]), Body::from_text(&self.0.clone()),                     // response body
            ))
        } else {
            None // close connection
        }
    }

    async fn on_start(&self, host: &str) {
        println!("Http server started on {host}");
    }

    async fn on_close(&self) {
        println!("Http server closed");
    }
}

#[tokio::main]
async fn main() {
    HttpServerStarter::new(
            EzSite("Hello World!".to_string()), 
            "localhost:8080"
        ).timeout(Some(Duration::from_secs(5)))
        .threads(5)
        .start_forever()
        .await
        .expect("http server error");
}

More examples

Contributing

If you would like to contribute to the project, feel free to fork the repository and submit a pull request.

License

This project is licensed under the WTFPL License