RP1 is a [Diesel] based CRUD for [Rocket]. To get started with RP1 you can read the project setup below, which will guide to through setting up a basic application. If you already have a running rocket/diesel application you should continue with reading the docs for the [crud] macro, which will explain the basic setup and explain all options that the crud generation has. [Diesel]: https://diesel.rs/ [Rocket]: https://rocket.rs/ ## Example This is an example of what RP1 allows you to create (note that we assume that you already have a schema definition for the users table generated by diesel). ```rust #[macro_use] extern crate diesel; mod schema; use rocket_sync_db_pools::database; #[database("diesel")] struct Db(diesel::PgConnection); #[rp1::crud(database = "Db", table = "users", auth = false)] struct User { #[primary_key] pub id: i32, #[validate(email)] username: String, role: String, #[generated] created_at: rp1::datetime::OffsetDateTime, #[generated] updated_at: rp1::datetime::OffsetDateTime, } #[rocket::launch] fn rocket() -> _ { rocket::build() .mount("/users", User::get_routes()) .attach(Db::fairing()) } ``` ## Project setup To get started, you will need to add a few dependencies to your `Cargo.toml`. ```toml [dependencies] rp1 = "0.3" diesel = { version = "1.4", features = ["postgres", "r2d2"] } diesel_migrations = "1.4" rocket = "0.5.0-rc.1" rocket_sync_db_pools = { version = "0.1.0-rc.1", features = ["diesel_postgres_pool"] } serde = "1.0" serde_json = "1.0" validator = "0.14" ``` Next, make sure you have installed the diesel cli. To do this, you can run ```bash cargo install diesel_cli --no-default-features --features postgres ``` If you need to have support for all database types supported by diesel you can run `cargo install diesel_cli` instead. Do make sure you installed the relevant libraries for the databases you intend to use (e.g. for debian based OSes make sure you installed `libpq-dev`). You should now also start a postgresql server. For the example in this repository we have a docker-compose.yml file that you can use to start a simple PostgreSQL development server using docker-compose. Next, create a file `.env` and add the `DATABASE_URL` environment variable. If you used the `docker-compose.yml` file then it should read: ```bash DATABASE_URL=postgres://crud@127.0.0.1:5432/crud ``` Now we are ready to run `diesel setup` which will create an initial migration and get us ready to define our database schema. Start by adding your initial migration using `diesel migration generate `. After you completed your migration run `diesel migration run` and a `schema.rs` file should appear. Next, update your `main.rs` file to read: ```rust #[macro_use] extern crate diesel; mod schema; use rocket_sync_db_pools::database; #[database("diesel")] struct Db(diesel::PgConnection); #[rocket::launch] fn rocket() -> _ { rocket::build() .attach(Db::fairing()) } ``` Note the `#[macro_use] extern crate diesel;` and `mod schema` specifically for Diesel, and the `struct Db` and `fn rocket` which are used by Rocket to communicate with Diesel. Finally, we need to configure rocket to use the same database as the diesel-cli. To do this, create a file `Rocket.toml` and place the following configuration in it (replacing the database URL with your own): ```toml [global.databases] diesel = { url = "postgres://crud@127.0.0.1:5432/crud" } ``` Now, you should be able to run `cargo run` and your project should start! You are finally ready for your first RP1 struct. To get started with your first RP1 struct, you should take a look at the documentation for the [crud] macro.