From 47d0f971fcf64d1bb036f0081d2ff209ec5007ee Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Thu, 17 Feb 2022 05:31:06 +0900 Subject: initial commit --- scripts/update-schema-models.bash | 95 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 scripts/update-schema-models.bash (limited to 'scripts/update-schema-models.bash') diff --git a/scripts/update-schema-models.bash b/scripts/update-schema-models.bash new file mode 100644 index 0000000..f91f043 --- /dev/null +++ b/scripts/update-schema-models.bash @@ -0,0 +1,95 @@ +#!/bin/bash +set -euo pipefail +tmp="$(mktemp -d)" +trap 'rm -rf -- "$tmp"' EXIT + +# deps +hash sqlite3 diesel diesel_ext rustfmt + +gen_route() { + local upper="$1" + local lower="$(sed 's/[[:upper:]]/_&/g;s/^_//' <<<"$upper" | tr '[:upper:]' '[:lower:]')" +cat <) -> Result>> { + let data = input.clone(); + db.run(move |conn| { + diesel::insert_into(${lower}s::table) + .values(&data) + .execute(conn) + }) + .await?; + Ok(Created::new("/").body(input)) +} + +#[get("/$lower/")] +async fn get_$lower(db: Db, id: i64) -> Option> { + db.run(move |conn| ${lower}s::table.filter(${lower}s::id.eq(id)).first(conn)) + .await + .map(InOut) + .ok() +} +EOF +} + +gen_routes() { + local db="$1" +cat <> = std::result::Result; +EOF + + grep 'pub struct' "$tmp"/model.rs | grep -v 'User' | while read -r _ _ name _; do + gen_route "$name" + done + +cat <, path: &str) -> Rocket { + rocket.attach(Db::fairing()).mount(path, routes![ +EOF + + grep 'pub struct' "$tmp"/model.rs | grep -v 'User' | while read -r _ _ name _; do + local lower="$(sed 's/[[:upper:]]/_&/g;s/^_//' <<<"$name" | tr '[:upper:]' '[:lower:]')" + printf ' %s,\n' "put_$lower" + printf ' %s,\n' "get_$lower" + done + +cat < Timestamp/created_at -> Nullable/g' |\ + sed 's/id -> BigInt/id -> Nullable/g' |\ + sed 's/meta -> Text/meta -> Nullable/g' \ + > "$tmp"/schema.rs + diesel_ext -s "$tmp"/schema.rs -m \ + -d 'Serialize, Deserialize, Queryable, Insertable, Clone, Debug' \ + -I 'rocket::serde::{Serialize, Deserialize}' |\ + awk '/#\[derive/{print;print "#[serde(crate = \"rocket::serde\")]";next}1' \ + > "$tmp"/model.rs + gen_routes "$db" | cat "$tmp"/schema.rs "$tmp"/model.rs - |\ + grep -v '^// Generated by diesel_ext' |\ + grep -v '^#!' > src/"$db".rs + rustfmt --edition 2021 src/"$db".rs +done -- cgit v1.2.3-70-g09d2