diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a853a5c..94f73f1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,7 +34,6 @@ jobs: # Examples - example-postgres-actix-web - example-postgres-benchmark - - example-postgres-hyper - example-redis-actix-web runs-on: ubuntu-latest steps: diff --git a/examples/postgres-hyper/.gitignore b/examples/postgres-hyper/.gitignore deleted file mode 100644 index 707b866..0000000 --- a/examples/postgres-hyper/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/target -**/*.rs.bk -Cargo.lock -.env diff --git a/examples/postgres-hyper/Cargo.toml b/examples/postgres-hyper/Cargo.toml deleted file mode 100644 index 11f1a79..0000000 --- a/examples/postgres-hyper/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -[package] -name = "example-postgres-hyper" -version = "0.0.0" -edition = "2018" -resolver = "2" -authors = ["Michael P. Jung "] -publish = false - -[dependencies] -config = "0.14" -deadpool-postgres = { path = "../../postgres", features = ["serde"] } -dotenvy = "0.15" -hyper = { version = "0.14", features = ["http1", "http2", "server", "runtime"] } -serde = { version = "1", features = ["derive"] } -serde_json = "1" -thiserror = "1.0" -tokio = { version = "1", features = ["macros", "rt", "rt-multi-thread"] } -tokio-postgres = { version = "0.7", features = ["with-uuid-1"] } -uuid = { version = "1", features = ["serde"] } diff --git a/examples/postgres-hyper/README.md b/examples/postgres-hyper/README.md deleted file mode 100644 index a802048..0000000 --- a/examples/postgres-hyper/README.md +++ /dev/null @@ -1,72 +0,0 @@ -# `deadpool-postgres` + `hyper` example - -This example combines `deadpool-postgres` with a `hyper` webservice to -implement a simple API service that responds with JSON read from -PostgreSQL. - -## Prerequisites - -The following instructions assumes that your current user can access the -PostgreSQL running at local host passwordless via unix domain socket. The -default installation of PostgreSQL usually already contains the following line -in its [pg_hba.conf](https://www.postgresql.org/docs/12/auth-pg-hba-conf.html): - -```txt -local all all peer -``` - -All you need to do is to create a PostgreSQL user with the same name as -your system user: - -```shell -sudo -u postgres createuser -s my_user_name -``` - -Now you should be able to run `psql` without any options and connect to -your local running PostgreSQL instance. e.g. by connecting to `template1`: - -```shell -psql template1 -``` - -## How to run the example - -1. Create a database - - ```shell - createdb deadpool - ``` - -2. Load example data - - ```shell - psql -f fixture.sql deadpool - ``` - -3. Create `.env` file in this directory - - ```env - LISTEN=[::1]:8000 - PG__DBNAME=deadpool - ``` - -4. Run the example - - ```shell - cargo run --release - ``` - -## Configuration options - -If you want to connect to your database using a TCP/IP socket you can use -the following template for your `.env` file: - -```env -PG__HOST=127.0.0.1 -PG__PORT=5432 -PG__USER=deadpool -PG__PASSWORD=somepassword -PG__DBNAME=deadpool -``` - -For more configuration options see `deadpool_postgres::Config`. diff --git a/examples/postgres-hyper/fixture.sql b/examples/postgres-hyper/fixture.sql deleted file mode 100644 index 354f783..0000000 --- a/examples/postgres-hyper/fixture.sql +++ /dev/null @@ -1,37 +0,0 @@ -CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA public; - -CREATE TABLE event ( - id uuid DEFAULT public.gen_random_uuid() NOT NULL, - title text NOT NULL -); - -COPY event (id, title) FROM stdin; -bec734be-97bd-4f48-b042-5ee859998c56 event1 -d36bc40a-fac4-4194-bec4-9ba8c602d994 event2 -18012fcf-3c53-4518-b9a6-22479ebe0212 event3 -6c4094fc-f8f7-4869-9c57-042bc43f257d event4 -e6173a6c-7cf4-4bc5-b676-0871d2705ed6 event5 -0d246195-537f-42dd-b7b3-6495116b8f56 event6 -c6b452b9-c1f3-4e11-9237-e22e0d6f14bd event7 -33ddb912-5bb1-4ba6-a03c-31a087ca8992 event8 -0da79dbe-63e9-4a0a-a3cb-34cfc451aa7e event9 -dec2f1cd-01af-41ed-a0d9-83a34a1c7b6d event10 -ecc1e7e4-828c-4ca3-a8a1-07444bb91300 event11 -c6ca56b1-9e02-4381-a248-3b9ef099eb93 event12 -f94693f0-789a-4a1f-a218-7399c294f00a event13 -c54ee1d7-2f8c-41c5-9478-a01f4c1c0e0b event14 -aa213e86-43fe-448d-8862-f2af9c686c82 event15 -7135cb1f-00ee-47be-b212-d45a791082ea event16 -b7dfa22b-f3a2-4547-a5df-2a6d3f54c90f event17 -c339d9fd-ce35-4578-a7c5-908cf619a321 event18 -7c49ba99-fdc3-4618-b23b-89ea3e5c4ee4 event19 -499b5807-abd2-4c24-9faa-5f463e6a19e3 event20 -d2ccbdb5-5b1e-4113-aded-24634ba1fb03 event21 -f2c82fc6-5b9a-446a-a6bc-27e814b1521b event22 -a818fbed-93dd-4e44-84a8-3591dbff3349 event23 -56dd7210-3869-4f1f-9f7a-fc58b3265f63 event24 -5803b0e8-98fe-47cd-b61d-478949b2ad70 event25 -b4a8d7da-ee5f-4d95-b452-86400697d051 event26 -f55fd18a-5532-453c-990e-098df71f2c24 event27 -3938cd54-65cf-4638-aba8-5861d9ba729e event28 -\. diff --git a/examples/postgres-hyper/src/main.rs b/examples/postgres-hyper/src/main.rs deleted file mode 100644 index 47023e1..0000000 --- a/examples/postgres-hyper/src/main.rs +++ /dev/null @@ -1,102 +0,0 @@ -use std::net::SocketAddr; - -use config::ConfigError; -use deadpool_postgres::{Client, Pool, PoolError, Runtime}; -use dotenvy::dotenv; -use hyper::service::{make_service_fn, service_fn}; -use hyper::{header, Body, Method, Request, Response, Server, StatusCode}; -use serde::{Deserialize, Serialize}; -use uuid::Uuid; - -#[derive(Debug, Deserialize)] -struct Config { - listen: String, - pg: deadpool_postgres::Config, -} - -impl Config { - fn from_env() -> Result { - config::Config::builder() - .add_source(config::Environment::default().separator("__")) - .build() - .unwrap() - .try_deserialize() - } -} - -#[derive(Deserialize, Serialize)] -struct Event { - id: Uuid, - title: String, -} - -#[derive(Debug, thiserror::Error)] -enum Error { - #[error("{0}")] - PoolError(#[from] PoolError), -} - -async fn event_list(pool: &Pool) -> Result, PoolError> { - let client: Client = pool.get().await?; - let stmt = client.prepare_cached("SELECT id, title FROM event").await?; - let rows = client.query(&stmt, &[]).await?; - Ok(rows - .into_iter() - .map(|row| Event { - id: row.get(0), - title: row.get(1), - }) - .collect()) -} - -async fn handle(req: Request, pool: Pool) -> Result, Error> { - match (req.method(), req.uri().path()) { - (&Method::GET, "/v1.0/event.list") => { - let events = event_list(&pool).await?; - let json = serde_json::to_string(&events).unwrap(); - let response = Response::builder() - .status(StatusCode::OK) - .header(header::CONTENT_TYPE, "application/json") - .body(Body::from(json)) - .unwrap(); - Ok(response) - } - _ => { - let mut not_found = Response::default(); - *not_found.status_mut() = StatusCode::NOT_FOUND; - Ok(not_found) - } - } -} - -#[tokio::main] -async fn main() -> Result<(), Box> { - async { - dotenv().ok(); - let config = Config::from_env()?; - let addr: SocketAddr = config.listen.parse()?; - let pool = config - .pg - .create_pool(Some(Runtime::Tokio1), tokio_postgres::NoTls)?; - - let make_svc = make_service_fn(|_conn| { - let pool = pool.clone(); - async { Ok::<_, Error>(service_fn(move |req| handle(req, pool.clone()))) } - }); - - let server = Server::bind(&addr).serve(make_svc); - - println!("Server running at http://{}/", &config.listen); - println!( - "Try the following URLs: http://{}/v1.0/event.list", - &config.listen - ); - - if let Err(e) = server.await { - eprintln!("server error: {e}"); - } - - Ok(()) - } - .await -}