first working example

This commit is contained in:
Gandalf 2023-06-05 14:02:10 +02:00
parent 527ae6433c
commit 9dc56c9c7f
5 changed files with 1868 additions and 3 deletions

1795
Cargo.lock generated Normal file

File diff suppressed because it is too large Load diff

26
Cargo.toml Normal file
View file

@ -0,0 +1,26 @@
[package]
name = "HambiMap"
version = "0.1.0"
authors = ["Gandalf <gandalfderbunte@riseup.net>"]
edition = "2018"
[dependencies]
tokio = { version = "0.2", features = ["macros"] }
warp = "0.2"
mobc-postgres = { version = "0.5", features = ["with-chrono-0_4"] }
mobc = "0.5"
serde = {version = "1.0", features = ["derive"] }
serde_derive = "1.0"
serde_json = "1.0"
thiserror = "1.0"
chrono = { version = "0.4", features = ["serde"] }
# tokio is our async runtime, which we need to execute futures
# warp is our web framework
# mobc / mobc-postgres represents an asynchronous connection pool for our database connections
# serde is for serializing and deserializing objects (e.g., to/from JSON)
# thiserror is a utility library well use for error handling
# chrono represents time and date utilities
# Questions: async vs sync
# which database to use?

View file

@ -1,3 +1,8 @@
# HambiMap # HambiMap
Code for a Website that collects stories and photos from 11 years of Hambach Forest occupation, with the goal of producing info tables to put up in the forest Code for a Website that collects stories and photos from 11 years of Hambach Forest occupation, with the goal of producing info tables to put up in the forest
## Branch tutorial1
After the first tutorial (branch 'tutorial') was incomplete and unfunctional, let's try [this one](https://blog.logrocket.com/async-crud-web-service-rust-warp/#handling-errors-with-warp) just for the backend.

21
src/db.rs Normal file
View file

@ -0,0 +1,21 @@
use crate::{DBCon, DBPool};
use mobc_postgres::{tokio_postgres, PgConnectionManager};
use tokio_postgres::{Config, Error, NoTls};
use std::fs;
use std::str::FromStr;
use std::time::Duration;
const DB_POOL_MAX_OPEN: u64 = 32;
const DB_POOL_MAX_IDLE: u64 = 8;
const DB_POOL_TIMEOUT_SECONDS: u64 = 15;
pub fn create_pool() -> std::result::Result<DBPool, mobc::Error<Error>> {
let config = Config::from_str("postgres://postgres@127.0.0.1:7878/postgres")?;
let manager = PgConnectionManager::new(config, NoTls);
Ok(Pool::builder()
.max_open(DB_POOL_MAX_OPEN)
.max_idle(DB_POOL_MAX_IDLE)
.get_timeout(Some(Duration::from_secs(DB_POOL_TIMEOUT_SECONDS)))
.build(manager))
}

View file

@ -1,3 +1,21 @@
fn main() { // mod data;
println!("Hello, world!"); // mod db;
// mod error;
// mod handler;
use warp::{http::StatusCode, Filter};
use mobc::{Connection, Pool};
use mobc_postgres::{tokio_postgres, PgConnectionManager};
use tokio_postgres::NoTls;
type DBCon = Connection<PgConnectionManager<NoTls>>;
type DBPool = Pool<PgConnectionManager<NoTls>>;
#[tokio::main]
async fn main() {
let health_route = warp::path!("health")
.map(|| StatusCode::OK);
let routes = health_route
.with(warp::cors().allow_any_origin());
warp::serve(routes).run(([127, 0, 0, 1], 8000)).await;
} }