Skip to content

Commit

Permalink
Store can now be converted into an Axum REST API Router.
Browse files Browse the repository at this point in the history
  • Loading branch information
meuter committed Apr 6, 2024
1 parent 930716c commit 856fd56
Show file tree
Hide file tree
Showing 9 changed files with 462 additions and 3 deletions.
231 changes: 231 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 5 additions & 3 deletions Cargo.toml
Expand Up @@ -11,18 +11,20 @@ homepage = "https://github.com/meuter/miniorm-rs"
repository = "https://github.com/meuter/miniorm-rs"

[dependencies]
async-trait = "0.1.79"
axum = { version = "0.7.5", optional = true }
miniorm-macros = { version = "0.4.0", path = "macros" }
serde = { version = "1.0.197", optional = true }
sqlx = { version = "0.7.4" }
miniorm-macros = { version = "0.4.0", path = "macros" }
async-trait = "0.1.79"

[workspace]
members = ["macros"]

[features]
default = ["postgres"]
full = ["postgres", "sqlite", "mysql", "serde"]
full = ["postgres", "sqlite", "mysql", "axum"]
serde = ["dep:serde"]
axum = ["dep:axum", "serde"]
postgres = ["sqlx/postgres"]
sqlite = ["sqlx/sqlite"]
mysql = ["sqlx/mysql"]
Expand Down
50 changes: 50 additions & 0 deletions examples/axum/main.rs
@@ -0,0 +1,50 @@
use axum::Router;
use miniorm::prelude::*;
use serde::{Deserialize, Serialize};
use sqlx::{FromRow, PgPool};
use std::net::SocketAddr;
use tokio::net::TcpListener;

#[derive(Debug, Clone, Eq, PartialEq, FromRow, Entity, Serialize, Deserialize)]
struct Todo {
#[postgres(TEXT NOT NULL)]
description: String,

#[postgres(BOOLEAN NOT NULL DEFAULT false)]
done: bool,
}

impl Todo {
pub fn new(description: impl AsRef<str>) -> Self {
let description = description.as_ref().to_string();
let done = false;
Todo { description, done }
}
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// connect to postgres
dotenv::dotenv().ok();
let url = std::env::var("POSTGRES_URL").expect("missing POSTGRES_URL env");
let db = PgPool::connect(&url).await?;

// initialize todo store
let todos = Store::new(db);
todos.recreate_table().await?;
todos.create(Todo::new("do the laundry")).await?;
todos.create(Todo::new("wash the dishes")).await?;
todos.create(Todo::new("go walk the dog")).await?;
todos.create(Todo::new("groceries")).await?;

// create the app
let app = Router::new().nest("/todos", todos.into_axum_router());
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
println!("listening on http://{}", addr);

// serve the app
let listener = TcpListener::bind(&addr).await.unwrap();
axum::serve(listener, app).await?;

Ok(())
}

0 comments on commit 856fd56

Please sign in to comment.