a lot of early diesel stuff
This commit is contained in:
parent
c0b0d16622
commit
6c343e5cb9
|
@ -539,6 +539,41 @@ dependencies = [
|
||||||
"regex-syntax 0.7.5",
|
"regex-syntax 0.7.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "darling"
|
||||||
|
version = "0.20.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1"
|
||||||
|
dependencies = [
|
||||||
|
"darling_core",
|
||||||
|
"darling_macro",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "darling_core"
|
||||||
|
version = "0.20.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120"
|
||||||
|
dependencies = [
|
||||||
|
"fnv",
|
||||||
|
"ident_case",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"strsim",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "darling_macro"
|
||||||
|
version = "0.20.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178"
|
||||||
|
dependencies = [
|
||||||
|
"darling_core",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "data-encoding"
|
name = "data-encoding"
|
||||||
version = "2.6.0"
|
version = "2.6.0"
|
||||||
|
@ -565,9 +600,52 @@ dependencies = [
|
||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "diesel"
|
||||||
|
version = "2.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "62d6dcd069e7b5fe49a302411f759d4cf1cf2c27fe798ef46fb8baefc053dd2b"
|
||||||
|
dependencies = [
|
||||||
|
"diesel_derives",
|
||||||
|
"libsqlite3-sys",
|
||||||
|
"serde_json",
|
||||||
|
"time",
|
||||||
|
"uuid",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "diesel-demo"
|
name = "diesel-demo"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"diesel",
|
||||||
|
"dotenvy",
|
||||||
|
"libpt",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "diesel_derives"
|
||||||
|
version = "2.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "59de76a222c2b8059f789cbe07afbfd8deb8c31dd0bc2a21f85e256c1def8259"
|
||||||
|
dependencies = [
|
||||||
|
"diesel_table_macro_syntax",
|
||||||
|
"dsl_auto_type",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "diesel_table_macro_syntax"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25"
|
||||||
|
dependencies = [
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "digest"
|
name = "digest"
|
||||||
|
@ -591,12 +669,32 @@ dependencies = [
|
||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dotenvy"
|
||||||
|
version = "0.15.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "drain_filter_polyfill"
|
name = "drain_filter_polyfill"
|
||||||
version = "0.1.3"
|
version = "0.1.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "669a445ee724c5c69b1b06fe0b63e70a1c84bc9bb7d9696cd4f4e3ec45050408"
|
checksum = "669a445ee724c5c69b1b06fe0b63e70a1c84bc9bb7d9696cd4f4e3ec45050408"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dsl_auto_type"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0892a17df262a24294c382f0d5997571006e7a4348b4327557c4ff1cd4a8bccc"
|
||||||
|
dependencies = [
|
||||||
|
"darling",
|
||||||
|
"either",
|
||||||
|
"heck 0.5.0",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "echargs"
|
name = "echargs"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
@ -1069,6 +1167,12 @@ dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ident_case"
|
||||||
|
version = "1.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "idna"
|
name = "idna"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
|
@ -2590,6 +2694,12 @@ version = "0.2.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "uuid"
|
||||||
|
version = "1.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d023da39d1fde5a8a3fe1f3e01ca9632ada0a63e9797de55a879d6e2236277be"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "valuable"
|
name = "valuable"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
export DATABASE_URL=./data/dieseldemo.db
|
|
@ -4,3 +4,9 @@ version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
anyhow.workspace = true
|
||||||
|
diesel = { version = "2.2.1", features = ["serde_json", "sqlite", "uuid"] }
|
||||||
|
dotenvy = "0.15.7"
|
||||||
|
libpt.workspace = true
|
||||||
|
serde = { workspace = true, features = ["serde_derive"] }
|
||||||
|
serde_json.workspace = true
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
# Diesel seems more complex
|
||||||
|
|
||||||
|
This project uses sqlite as I can't be bothered to host a postgres instance
|
||||||
|
just for this.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
* Install diesel and the diesel CLI tool.
|
||||||
|
* `DATABASE_URL=./data/dieseldemo.db diesel setup`
|
||||||
|
* We create migrations up/down and fill them with sql to do something and undo something
|
||||||
|
* Alternatively, we can use a rust macro to define schemes that become sql
|
||||||
|
through magic. I like this way better for this project because I learn more
|
||||||
|
diesel and also because it avoids having to deal with incompatibilities of the
|
||||||
|
database types (maybe).
|
||||||
|
* Run `diesel migration generate --diff-schema create_posts`
|
||||||
|
|
||||||
|
## Ressources
|
||||||
|
|
||||||
|
* [Official Guide](https://diesel.rs/guides/getting-started)
|
Binary file not shown.
|
@ -0,0 +1,9 @@
|
||||||
|
# For documentation on how to configure this file,
|
||||||
|
# see https://diesel.rs/guides/configuring-diesel-cli
|
||||||
|
|
||||||
|
[print_schema]
|
||||||
|
file = "src/schema.rs"
|
||||||
|
custom_type_derives = ["diesel::query_builder::QueryId", "Clone"]
|
||||||
|
|
||||||
|
[migrations_directory]
|
||||||
|
dir = "/home/cscherr/Documents/code/rust/rs-basic/members/diesel-demo/migrations"
|
|
@ -0,0 +1,2 @@
|
||||||
|
-- This file should undo anything in `up.sql`
|
||||||
|
DROP TABLE IF EXISTS `posts`;
|
|
@ -0,0 +1,8 @@
|
||||||
|
-- Your SQL goes here
|
||||||
|
CREATE TABLE `posts`(
|
||||||
|
`id` INT4 NOT NULL PRIMARY KEY,
|
||||||
|
`title` VARCHAR NOT NULL,
|
||||||
|
`body` TEXT NOT NULL,
|
||||||
|
`published` BOOL NOT NULL
|
||||||
|
);
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
pub mod schema;
|
||||||
|
|
||||||
|
use std::env;
|
||||||
|
|
||||||
|
use diesel::prelude::*;
|
||||||
|
use diesel::sqlite::SqliteConnection;
|
||||||
|
|
||||||
|
use dotenvy::dotenv;
|
||||||
|
|
||||||
|
use libpt::log::error; // load envars from a `.env` file
|
||||||
|
|
||||||
|
pub fn establish_connection() -> anyhow::Result<SqliteConnection> {
|
||||||
|
dotenv()?;
|
||||||
|
|
||||||
|
let database_url = env::var("DATABASE_URL")?;
|
||||||
|
Ok(SqliteConnection::establish(&database_url)
|
||||||
|
.inspect_err(|e| error!("Error connecting to {}:\n{e:#?}", database_url))?)
|
||||||
|
}
|
|
@ -1,3 +1,16 @@
|
||||||
fn main() {
|
use libpt::log::{self, debug};
|
||||||
println!("Hello, world!");
|
|
||||||
|
use diesel_demo as lib;
|
||||||
|
|
||||||
|
fn main() -> anyhow::Result<()> {
|
||||||
|
let _logger = log::Logger::builder()
|
||||||
|
.max_level(log::Level::TRACE)
|
||||||
|
.uptime(true)
|
||||||
|
.build();
|
||||||
|
debug!("logger initialized");
|
||||||
|
|
||||||
|
let conn = lib::establish_connection()?;
|
||||||
|
debug!("db connection established");
|
||||||
|
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
// @generated automatically by Diesel CLI.
|
||||||
|
|
||||||
|
diesel::table! {
|
||||||
|
posts (id) {
|
||||||
|
id -> Int4, // what the hell is an Int4???? I guess it must
|
||||||
|
// be a 4 byte integer (u32?), no way it would be a nibble.
|
||||||
|
title -> Varchar,
|
||||||
|
body -> Text, // What is the difference between Text and Varchar? I know Varchar
|
||||||
|
// from various DB stuff but idk Text
|
||||||
|
published -> Bool,
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue