ruxt_macros

Crates.ioruxt_macros
lib.rsruxt_macros
version0.1.4
sourcesrc
created_at2024-05-03 04:26:34.805157
updated_at2024-05-05 03:15:58.771197
descriptionThe proc-macro crate for Ruxt, a file-based routing web framework.
homepagehttps://ruxt.rs
repositoryhttps://github.com/duncanlutz/ruxt-macros
max_upload_size
id1228359
size16,141
Duncan Lutz (duncanlutz)

documentation

README

Ruxt Macros

This is a collection of macros for the Ruxt web framework.

Installation

Run the following command to add Ruxt to your project:

cargo add ruxt

Add the following to your Cargo.toml:

[dependencies]
ruxt-macros = "0.1.4"

Usage

#[ruxt_macros::main]
async fn main() -> std::io::Result<()> {
   let test_data = "Hello, World!";
   HttpServer::new(move || App::new().app_data(test_data.to_string()))
   .bind(("0.0.0.0", 8080))?
   .run()
   .await
}

Basic Routing

The Ruxt main macro will automatically generate routes for files in the routes directory. The routes are generated based on the file name, so a file named index.rs will be available at the root of the server.

The macro determines which HTTP verb to use based on the function name. For example, a function named get will be a GET route.

So for example:

// routes/index.rs
use actix_web::{web, HttpResponse, Responder};

pub async fn get() -> impl Responder {
    HttpResponse::Ok().body("Hello, World!")
}

Will be available as a GET request at http://localhost:8080/.

The following verbs are available for routing:

  • get
  • post
  • put
  • patch
  • delete

Dynamic Paths

Dynamic routes can be created by naming a folder or file with two leading underscores. For example, a folder named __user will create a dynamic route at /user/{id}.

// routes/__user.rs
use actix_web::{web, HttpResponse, Responder};

pub async fn post(id: web::Path<String>) -> impl Responder {
    HttpResponse::Ok().body(format!("Hello, {}!", id))
}

Will be available as a POST request at http://localhost:8080/user/{id}.

Current Limitations

  • As of now it is not possible to have a route with the name mod or index because of the way the macro generates routes. I'm looking into a solution for this.

License

This project is licensed under the MIT license.

Commit count: 9

cargo fmt