From fbf2dd89dcc936150feb45be0e7e9eea59abc1c5 Mon Sep 17 00:00:00 2001 From: Nicolai Van der Storm Date: Fri, 21 Feb 2025 09:10:11 +0100 Subject: [PATCH] actix test --- Cargo.lock | 929 +++++++++++++++++++--------------- Cargo.toml | 17 +- log | 516 ------------------- src/base/controller.rs | 78 --- src/base/entity.rs | 16 - src/base/i_service.rs | 11 - src/base/mod.rs | 4 - src/base/service.rs | 89 ---- src/config/db.rs | 23 - src/config/mod.rs | 1 - src/crud/handlers.rs | 88 ++++ src/crud/mod.rs | 2 + src/crud/trait.rs | 14 + src/db/connection.rs | 14 + src/db/mod.rs | 1 + src/main.rs | 65 +-- src/models/mod.rs | 1 + src/models/user.rs | 63 +++ src/routes/crud.rs | 24 + src/routes/mod.rs | 2 +- src/routes/user/controller.rs | 44 -- src/routes/user/mod.rs | 4 - src/routes/user/model.rs | 35 -- src/routes/user/schema.rs | 9 - src/routes/user/service.rs | 5 - 25 files changed, 765 insertions(+), 1290 deletions(-) delete mode 100644 log delete mode 100644 src/base/controller.rs delete mode 100644 src/base/entity.rs delete mode 100644 src/base/i_service.rs delete mode 100644 src/base/mod.rs delete mode 100644 src/base/service.rs delete mode 100644 src/config/db.rs delete mode 100644 src/config/mod.rs create mode 100644 src/crud/handlers.rs create mode 100644 src/crud/mod.rs create mode 100644 src/crud/trait.rs create mode 100644 src/db/connection.rs create mode 100644 src/db/mod.rs create mode 100644 src/models/mod.rs create mode 100644 src/models/user.rs create mode 100644 src/routes/crud.rs delete mode 100644 src/routes/user/controller.rs delete mode 100644 src/routes/user/mod.rs delete mode 100644 src/routes/user/model.rs delete mode 100644 src/routes/user/schema.rs delete mode 100644 src/routes/user/service.rs diff --git a/Cargo.lock b/Cargo.lock index d8d0175..3691eec 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,189 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "actix-codec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-sink", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "actix-http" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d48f96fc3003717aeb9856ca3d02a8c7de502667ad76eeacd830b48d2e91fac4" +dependencies = [ + "actix-codec", + "actix-rt", + "actix-service", + "actix-utils", + "ahash", + "base64", + "bitflags", + "brotli", + "bytes", + "bytestring", + "derive_more", + "encoding_rs", + "flate2", + "futures-core", + "h2", + "http", + "httparse", + "httpdate", + "itoa", + "language-tags", + "local-channel", + "mime", + "percent-encoding", + "pin-project-lite", + "rand", + "sha1", + "smallvec", + "tokio", + "tokio-util", + "tracing", + "zstd", +] + +[[package]] +name = "actix-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "actix-router" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13d324164c51f63867b57e73ba5936ea151b8a41a1d23d1031eeb9f70d0236f8" +dependencies = [ + "bytestring", + "cfg-if", + "http", + "regex", + "regex-lite", + "serde", + "tracing", +] + +[[package]] +name = "actix-rt" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eda4e2a6e042aa4e55ac438a2ae052d3b5da0ecf83d7411e1a368946925208" +dependencies = [ + "futures-core", + "tokio", +] + +[[package]] +name = "actix-server" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca2549781d8dd6d75c40cf6b6051260a2cc2f3c62343d761a969a0640646894" +dependencies = [ + "actix-rt", + "actix-service", + "actix-utils", + "futures-core", + "futures-util", + "mio", + "socket2", + "tokio", + "tracing", +] + +[[package]] +name = "actix-service" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a" +dependencies = [ + "futures-core", + "paste", + "pin-project-lite", +] + +[[package]] +name = "actix-utils" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" +dependencies = [ + "local-waker", + "pin-project-lite", +] + +[[package]] +name = "actix-web" +version = "4.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9180d76e5cc7ccbc4d60a506f2c727730b154010262df5b910eb17dbe4b8cb38" +dependencies = [ + "actix-codec", + "actix-http", + "actix-macros", + "actix-router", + "actix-rt", + "actix-server", + "actix-service", + "actix-utils", + "actix-web-codegen", + "ahash", + "bytes", + "bytestring", + "cfg-if", + "cookie", + "derive_more", + "encoding_rs", + "futures-core", + "futures-util", + "impl-more", + "itoa", + "language-tags", + "log", + "mime", + "once_cell", + "pin-project-lite", + "regex", + "regex-lite", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "socket2", + "time", + "url", +] + +[[package]] +name = "actix-web-codegen" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f591380e2e68490b5dfaf1dd1aa0ebe78d84ba7067078512b4ea6e4492d622b8" +dependencies = [ + "actix-router", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "addr2line" version = "0.24.2" @@ -17,6 +200,19 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -27,29 +223,18 @@ dependencies = [ ] [[package]] -name = "anyhow" -version = "1.0.95" +name = "alloc-no-stdlib" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" [[package]] -name = "arbitrary" -version = "1.4.1" +name = "alloc-stdlib" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" dependencies = [ - "derive_arbitrary", -] - -[[package]] -name = "async-trait" -version = "0.1.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" -dependencies = [ - "proc-macro2", - "quote", - "syn", + "alloc-no-stdlib", ] [[package]] @@ -58,60 +243,6 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" -[[package]] -name = "axum" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d6fd624c75e18b3b4c6b9caf42b1afe24437daaee904069137d8bab077be8b8" -dependencies = [ - "axum-core", - "bytes", - "form_urlencoded", - "futures-util", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-util", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "serde_json", - "serde_path_to_error", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tower", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "axum-core" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1362f362fd16024ae199c1970ce98f9661bf5ef94b9808fee734bc3698b733" -dependencies = [ - "bytes", - "futures-util", - "http", - "http-body", - "http-body-util", - "mime", - "pin-project-lite", - "rustversion", - "sync_wrapper", - "tower-layer", - "tower-service", - "tracing", -] - [[package]] name = "backtrace" version = "0.3.74" @@ -149,10 +280,25 @@ dependencies = [ ] [[package]] -name = "bumpalo" -version = "3.17.0" +name = "brotli" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74fa05ad7d803d413eb8380983b092cbbaf9a85f151b871360e7b00cd7060b37" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] [[package]] name = "byteorder" @@ -166,12 +312,49 @@ version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" +[[package]] +name = "bytestring" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e465647ae23b2823b0753f50decb2d5a86d2bb2cac04788fafd1f80e45378e5f" +dependencies = [ + "bytes", +] + +[[package]] +name = "cc" +version = "1.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3d1b2e905a3a7b00a6141adb0e4c0bb941d11caf55349d863942a1cc44e3c9" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "cookie" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + [[package]] name = "cpufeatures" version = "0.2.17" @@ -190,12 +373,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - [[package]] name = "crypto-common" version = "0.1.6" @@ -242,13 +419,24 @@ dependencies = [ ] [[package]] -name = "derive_arbitrary" -version = "1.4.1" +name = "deranged" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ + "powerfmt", +] + +[[package]] +name = "derive_more" +version = "0.99.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3da29a38df43d6f156149c9b43ded5e018ddff2a855cf2cfd62e8cd7d079c69f" +dependencies = [ + "convert_case", "proc-macro2", "quote", + "rustc_version", "syn", ] @@ -264,7 +452,6 @@ dependencies = [ "itoa", "pq-sys", "r2d2", - "serde_json", ] [[package]] @@ -311,10 +498,10 @@ dependencies = [ ] [[package]] -name = "dotenvy" -version = "0.15.7" +name = "dotenv" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" [[package]] name = "dsl_auto_type" @@ -336,6 +523,15 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -367,21 +563,18 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", -] - [[package]] name = "futures-core" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + [[package]] name = "futures-task" version = "0.3.31" @@ -410,12 +603,42 @@ dependencies = [ "version_check", ] +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + [[package]] name = "gimli" version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "hashbrown" version = "0.15.2" @@ -430,38 +653,15 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "http" -version = "1.2.0" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ "bytes", "fnv", "itoa", ] -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http", -] - -[[package]] -name = "http-body-util" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" -dependencies = [ - "bytes", - "futures-util", - "http", - "http-body", - "pin-project-lite", -] - [[package]] name = "httparse" version = "1.10.0" @@ -474,41 +674,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" -[[package]] -name = "hyper" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", -] - -[[package]] -name = "hyper-util" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" -dependencies = [ - "bytes", - "futures-util", - "http", - "http-body", - "hyper", - "pin-project-lite", - "tokio", - "tower-service", -] - [[package]] name = "icu_collections" version = "1.5.0" @@ -654,6 +819,12 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "impl-more" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2" + [[package]] name = "indexmap" version = "2.7.1" @@ -662,7 +833,6 @@ checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown", - "serde", ] [[package]] @@ -671,6 +841,21 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "language-tags" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" + [[package]] name = "libc" version = "0.2.169" @@ -683,6 +868,23 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +[[package]] +name = "local-channel" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" +dependencies = [ + "futures-core", + "futures-sink", + "local-waker", +] + +[[package]] +name = "local-waker" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" + [[package]] name = "lock_api" version = "0.4.12" @@ -693,24 +895,12 @@ dependencies = [ "scopeguard", ] -[[package]] -name = "lockfree-object-pool" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" - [[package]] name = "log" version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" -[[package]] -name = "matchit" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" - [[package]] name = "memchr" version = "2.7.4" @@ -723,16 +913,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - [[package]] name = "miniz_oxide" version = "0.8.4" @@ -749,10 +929,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", + "log", "wasi", "windows-sys", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "object" version = "0.36.7" @@ -772,18 +959,11 @@ checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" name = "openlayerhub" version = "0.1.0" dependencies = [ - "anyhow", - "async-trait", - "axum", + "actix-web", "diesel", - "dotenvy", - "r2d2", + "dotenv", "serde", "serde_json", - "tokio", - "tower", - "utoipa", - "utoipa-swagger-ui", ] [[package]] @@ -809,6 +989,12 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "percent-encoding" version = "2.3.1" @@ -827,6 +1013,27 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + [[package]] name = "pq-sys" version = "0.7.0" @@ -866,6 +1073,36 @@ dependencies = [ "scheduled-thread-pool", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + [[package]] name = "redox_syscall" version = "0.5.8" @@ -898,46 +1135,18 @@ dependencies = [ "regex-syntax", ] +[[package]] +name = "regex-lite" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" + [[package]] name = "regex-syntax" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" -[[package]] -name = "rust-embed" -version = "8.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa66af4a4fdd5e7ebc276f115e895611a34739a9c1c01028383d612d550953c0" -dependencies = [ - "rust-embed-impl", - "rust-embed-utils", - "walkdir", -] - -[[package]] -name = "rust-embed-impl" -version = "8.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6125dbc8867951125eec87294137f4e9c2c96566e61bf72c45095a7c77761478" -dependencies = [ - "proc-macro2", - "quote", - "rust-embed-utils", - "syn", - "walkdir", -] - -[[package]] -name = "rust-embed-utils" -version = "8.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5347777e9aacb56039b0e1f28785929a8a3b709e87482e7442c72e7c12529d" -dependencies = [ - "sha2", - "walkdir", -] - [[package]] name = "rustc-demangle" version = "0.1.24" @@ -945,10 +1154,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] -name = "rustversion" -version = "1.0.19" +name = "rustc_version" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] [[package]] name = "ryu" @@ -956,15 +1168,6 @@ version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - [[package]] name = "scheduled-thread-pool" version = "0.2.7" @@ -981,19 +1184,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] -name = "serde" -version = "1.0.217" +name = "semver" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" + +[[package]] +name = "serde" +version = "1.0.218" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" dependencies = [ "proc-macro2", "quote", @@ -1002,9 +1211,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.138" +version = "1.0.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" +checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6" dependencies = [ "itoa", "memchr", @@ -1012,16 +1221,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_path_to_error" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" -dependencies = [ - "itoa", - "serde", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -1035,16 +1234,22 @@ dependencies = [ ] [[package]] -name = "sha2" -version = "0.10.8" +name = "sha1" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", "digest", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -1055,10 +1260,13 @@ dependencies = [ ] [[package]] -name = "simd-adler32" -version = "0.3.7" +name = "slab" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] [[package]] name = "smallvec" @@ -1099,12 +1307,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" - [[package]] name = "synstructure" version = "0.13.1" @@ -1117,23 +1319,34 @@ dependencies = [ ] [[package]] -name = "thiserror" -version = "2.0.11" +name = "time" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ - "thiserror-impl", + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", ] [[package]] -name = "thiserror-impl" -version = "2.0.11" +name = "time-core" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ - "proc-macro2", - "quote", - "syn", + "num-conv", + "time-core", ] [[package]] @@ -1160,49 +1373,22 @@ dependencies = [ "pin-project-lite", "signal-hook-registry", "socket2", - "tokio-macros", "windows-sys", ] [[package]] -name = "tokio-macros" -version = "2.5.0" +name = "tokio-util" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tower" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ + "bytes", "futures-core", - "futures-util", + "futures-sink", "pin-project-lite", - "sync_wrapper", "tokio", - "tower-layer", - "tower-service", - "tracing", ] -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - [[package]] name = "tracing" version = "0.1.41" @@ -1229,17 +1415,11 @@ version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" -[[package]] -name = "unicase" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" - [[package]] name = "unicode-ident" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" +checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" [[package]] name = "url" @@ -1264,48 +1444,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" -[[package]] -name = "utoipa" -version = "5.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435c6f69ef38c9017b4b4eea965dfb91e71e53d869e896db40d1cf2441dd75c0" -dependencies = [ - "indexmap", - "serde", - "serde_json", - "utoipa-gen", -] - -[[package]] -name = "utoipa-gen" -version = "5.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77d306bc75294fd52f3e99b13ece67c02c1a2789190a6f31d32f736624326f7" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn", -] - -[[package]] -name = "utoipa-swagger-ui" -version = "9.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "161166ec520c50144922a625d8bc4925cc801b2dda958ab69878527c0e5c5d61" -dependencies = [ - "axum", - "base64", - "mime_guess", - "regex", - "rust-embed", - "serde", - "serde_json", - "url", - "utoipa", - "zip", -] - [[package]] name = "vcpkg" version = "0.2.15" @@ -1318,31 +1456,12 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" -[[package]] -name = "winapi-util" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" -dependencies = [ - "windows-sys", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -1452,6 +1571,27 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "zerofrom" version = "0.1.5" @@ -1496,32 +1636,29 @@ dependencies = [ ] [[package]] -name = "zip" -version = "2.2.2" +name = "zstd" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae9c1ea7b3a5e1f4b922ff856a129881167511563dc219869afe3787fc0c1a45" +checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" dependencies = [ - "arbitrary", - "crc32fast", - "crossbeam-utils", - "displaydoc", - "flate2", - "indexmap", - "memchr", - "thiserror", - "zopfli", + "zstd-safe", ] [[package]] -name = "zopfli" -version = "0.8.1" +name = "zstd-safe" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" +checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" dependencies = [ - "bumpalo", - "crc32fast", - "lockfree-object-pool", - "log", - "once_cell", - "simd-adler32", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.13+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +dependencies = [ + "cc", + "pkg-config", ] diff --git a/Cargo.toml b/Cargo.toml index 42f1d2e..ed4b3f5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,15 +4,8 @@ version = "0.1.0" edition = "2021" [dependencies] -anyhow = "1.0.95" -async-trait = "0.1.86" -axum = { version = "0.8.1", features = ["json"] } -diesel = { version = "2.2.7", features = ["postgres", "r2d2", "serde_json"] } -dotenvy = "0.15.7" -r2d2 = "0.8.10" -serde = { version = "1.0.217", features = ["derive"] } -serde_json = "1.0.138" -tokio = { version = "1.43.0", features = ["full"] } -tower = "0.5.2" -utoipa = { version = "5.3.1", features = ["axum_extras"] } -utoipa-swagger-ui = { version = "9.0.0", features = ["axum"] } +actix-web = "4.9.0" +diesel = { version = "2.2.7", features = ["postgres", "r2d2"] } +dotenv = "0.15.0" +serde = { version = "1.0.218", features = ["derive"] } +serde_json = "1.0.139" diff --git a/log b/log deleted file mode 100644 index 5d8fea4..0000000 --- a/log +++ /dev/null @@ -1,516 +0,0 @@ - Compiling openlayerhub v0.1.0 (/home/nicolaivds/GIT/OpenLayerHub) -error[E0277]: the trait bound `InsertStatement<::Table, ::Table>>::Values>: LoadQuery<'_, _, _>` is not satisfied - --> src/base/service.rs:60:25 - | -60 | .get_result(&mut conn) - | ---------- ^^^^^^^^^ the trait `AsQuery` is not implemented for `InsertStatement<::Table, ::Table>>::Values>`, which is required by `InsertStatement<::Table, ::Table>>::Values>: LoadQuery<'_, _, _>` - | | - | required by a bound introduced by this call - | - = note: required for `InsertStatement<::Table, ::Table>>::Values>` to implement `LoadQuery<'_, _, _>` -note: required by a bound in `get_result` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_dsl/mod.rs:1722:15 - | -1720 | fn get_result<'query, U>(self, conn: &mut Conn) -> QueryResult - | ---------- required by a bound in this associated function -1721 | where -1722 | Self: LoadQuery<'query, Conn, U>, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `RunQueryDsl::get_result` -help: consider extending the `where` clause, but there might be an alternative better way to express this requirement - | -54 | i32: diesel::deserialize::FromSql, InsertStatement<::Table, ::Table>>::Values>: AsQuery - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -error[E0277]: the trait bound `Conn: LoadConnection` is not satisfied - --> src/base/service.rs:60:25 - | -60 | .get_result(&mut conn) - | ---------- ^^^^^^^^^ the trait `LoadConnection` is not implemented for `Conn`, which is required by `InsertStatement<::Table, ::Table>>::Values>: LoadQuery<'_, _, _>` - | | - | required by a bound introduced by this call - | - = note: required for `PooledConnection>` to implement `LoadConnection` - = note: required for `InsertStatement<::Table, ::Table>>::Values>` to implement `LoadQuery<'_, PooledConnection>, _>` -note: required by a bound in `get_result` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_dsl/mod.rs:1722:15 - | -1720 | fn get_result<'query, U>(self, conn: &mut Conn) -> QueryResult - | ---------- required by a bound in this associated function -1721 | where -1722 | Self: LoadQuery<'query, Conn, U>, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `RunQueryDsl::get_result` -help: consider further restricting this bound - | -50 | Conn: diesel::Connection + R2D2Connection + 'static + diesel::connection::LoadConnection, - | ++++++++++++++++++++++++++++++++++++ - -error[E0277]: the trait bound `::Table: SingleValue` is not satisfied - --> src/base/service.rs:60:25 - | -60 | .get_result(&mut conn) - | ---------- ^^^^^^^^^ the trait `SingleValue` is not implemented for `::Table`, which is required by `InsertStatement<::Table, ::Table>>::Values>: LoadQuery<'_, _, _>` - | | - | required by a bound introduced by this call - | - = note: required for `::Table` to implement `SqlTypeOrSelectable` - = note: required for `T` to implement `FromSqlRow<::Table, ::Backend>` - = note: required for `InsertStatement<::Table, ::Table>>::Values>` to implement `LoadQuery<'_, PooledConnection>, T>` -note: required by a bound in `get_result` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_dsl/mod.rs:1722:15 - | -1720 | fn get_result<'query, U>(self, conn: &mut Conn) -> QueryResult - | ---------- required by a bound in this associated function -1721 | where -1722 | Self: LoadQuery<'query, Conn, U>, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `RunQueryDsl::get_result` - -error[E0275]: overflow evaluating the requirement `_: Sized` - --> src/base/service.rs:67:14 - | -67 | .filter(T::primary_key().eq(id)) - | ^^^^^^ - | - = help: consider increasing the recursion limit by adding a `#![recursion_limit = "512"]` attribute to your crate (`openlayerhub`) - = note: required for `<::Table as AsQuery>::Query` to implement `FilterDsl<_>` - -error[E0277]: `<::Table as AsQuery>::Query` is no valid SQL fragment for the `_` backend - --> src/base/service.rs:77:24 - | -77 | .load::(&mut conn) - | ---- ^^^^^^^^^ the trait `QueryFragment<_>` is not implemented for `<::Table as AsQuery>::Query`, which is required by `::Table: LoadQuery<'_, _, T>` - | | - | required by a bound introduced by this call - | - = note: this usually means that the `_` database system does not support - this SQL syntax - = help: the following other types implement trait `QueryFragment`: - `&T` implements `QueryFragment` - `()` implements `QueryFragment` - `(T0, T1)` implements `QueryFragment<__DB>` - `(T0, T1, T2)` implements `QueryFragment<__DB>` - `(T0, T1, T2, T3)` implements `QueryFragment<__DB>` - `(T0, T1, T2, T3, T4)` implements `QueryFragment<__DB>` - `(T0, T1, T2, T3, T4, T5)` implements `QueryFragment<__DB>` - `(T0, T1, T2, T3, T4, T5, T6)` implements `QueryFragment<__DB>` - and 278 others - = note: required for `::Table` to implement `LoadQuery<'_, _, T>` -note: required by a bound in `diesel::RunQueryDsl::load` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_dsl/mod.rs:1542:15 - | -1540 | fn load<'query, U>(self, conn: &mut Conn) -> QueryResult> - | ---- required by a bound in this associated function -1541 | where -1542 | Self: LoadQuery<'query, Conn, U>, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `RunQueryDsl::load` - -error[E0277]: the trait bound `<::Table as AsQuery>::Query: QueryId` is not satisfied - --> src/base/service.rs:77:24 - | -77 | .load::(&mut conn) - | ---- ^^^^^^^^^ the trait `QueryId` is not implemented for `<::Table as AsQuery>::Query`, which is required by `::Table: LoadQuery<'_, _, T>` - | | - | required by a bound introduced by this call - | - = note: required for `::Table` to implement `LoadQuery<'_, _, T>` -note: required by a bound in `diesel::RunQueryDsl::load` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_dsl/mod.rs:1542:15 - | -1540 | fn load<'query, U>(self, conn: &mut Conn) -> QueryResult> - | ---- required by a bound in this associated function -1541 | where -1542 | Self: LoadQuery<'query, Conn, U>, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `RunQueryDsl::load` - -error[E0277]: the trait bound `<::Table as AsQuery>::SqlType: SingleValue` is not satisfied - --> src/base/service.rs:77:24 - | -77 | .load::(&mut conn) - | ---- ^^^^^^^^^ the trait `SingleValue` is not implemented for `<::Table as AsQuery>::SqlType`, which is required by `::Table: LoadQuery<'_, _, T>` - | | - | required by a bound introduced by this call - | - = note: required for `<::Table as AsQuery>::SqlType` to implement `load_dsl::private::CompatibleType` - = note: required for `::Table` to implement `LoadQuery<'_, _, T>` -note: required by a bound in `diesel::RunQueryDsl::load` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_dsl/mod.rs:1542:15 - | -1540 | fn load<'query, U>(self, conn: &mut Conn) -> QueryResult> - | ---- required by a bound in this associated function -1541 | where -1542 | Self: LoadQuery<'query, Conn, U>, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `RunQueryDsl::load` - -error[E0277]: the trait bound `T: diesel::Queryable<<::Table as AsQuery>::SqlType, _>` is not satisfied - --> src/base/service.rs:77:24 - | -77 | .load::(&mut conn) - | ---- ^^^^^^^^^ the trait `diesel::Queryable<<::Table as AsQuery>::SqlType, _>` is not implemented for `T`, which is required by `::Table: LoadQuery<'_, _, T>` - | | - | required by a bound introduced by this call - | - = help: the following other types implement trait `diesel::Queryable`: - `(T0, T1)` implements `diesel::Queryable<(ST0, ST1), __DB>` - `(T0, T1)` implements `diesel::Queryable, Pg>` - `(T0, T1, T2)` implements `diesel::Queryable<(ST0, ST1, ST2), __DB>` - `(T0, T1, T2)` implements `diesel::Queryable, Pg>` - `(T0, T1, T2, T3)` implements `diesel::Queryable<(ST0, ST1, ST2, ST3), __DB>` - `(T0, T1, T2, T3)` implements `diesel::Queryable, Pg>` - `(T0, T1, T2, T3, T4)` implements `diesel::Queryable<(ST0, ST1, ST2, ST3, ST4), __DB>` - `(T0, T1, T2, T3, T4)` implements `diesel::Queryable, Pg>` - and 116 others - = note: required for `T` to implement `FromSqlRow<<::Table as AsQuery>::SqlType, _>` - = note: required for `<::Table as AsQuery>::SqlType` to implement `load_dsl::private::CompatibleType` - = note: required for `::Table` to implement `LoadQuery<'_, _, T>` -note: required by a bound in `diesel::RunQueryDsl::load` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_dsl/mod.rs:1542:15 - | -1540 | fn load<'query, U>(self, conn: &mut Conn) -> QueryResult> - | ---- required by a bound in this associated function -1541 | where -1542 | Self: LoadQuery<'query, Conn, U>, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `RunQueryDsl::load` - -error[E0277]: the trait bound `Conn: LoadConnection` is not satisfied - --> src/base/service.rs:77:24 - | -77 | .load::(&mut conn) - | ---- ^^^^^^^^^ the trait `LoadConnection` is not implemented for `Conn`, which is required by `::Table: LoadQuery<'_, _, T>` - | | - | required by a bound introduced by this call - | - = note: required for `PooledConnection>` to implement `LoadConnection` - = note: required for `::Table` to implement `LoadQuery<'_, PooledConnection>, T>` -note: required by a bound in `diesel::RunQueryDsl::load` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_dsl/mod.rs:1542:15 - | -1540 | fn load<'query, U>(self, conn: &mut Conn) -> QueryResult> - | ---- required by a bound in this associated function -1541 | where -1542 | Self: LoadQuery<'query, Conn, U>, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `RunQueryDsl::load` -help: consider further restricting this bound - | -50 | Conn: diesel::Connection + R2D2Connection + 'static + diesel::connection::LoadConnection, - | ++++++++++++++++++++++++++++++++++++ - -error[E0277]: the trait bound `::Backend: QueryMetadata<<::Table as AsQuery>::SqlType>` is not satisfied - --> src/base/service.rs:77:24 - | -77 | .load::(&mut conn) - | ---- ^^^^^^^^^ the trait `HasSqlType<<::Table as AsQuery>::SqlType>` is not implemented for `::Backend`, which is required by `::Table: LoadQuery<'_, _, T>` - | | - | required by a bound introduced by this call - | - = note: required for `::Backend` to implement `QueryMetadata<<::Table as AsQuery>::SqlType>` - = note: required for `::Table` to implement `LoadQuery<'_, PooledConnection>, T>` -note: required by a bound in `diesel::RunQueryDsl::load` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_dsl/mod.rs:1542:15 - | -1540 | fn load<'query, U>(self, conn: &mut Conn) -> QueryResult> - | ---- required by a bound in this associated function -1541 | where -1542 | Self: LoadQuery<'query, Conn, U>, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `RunQueryDsl::load` - -error[E0277]: the trait bound `::Table: IntoUpdateTarget` is not satisfied - --> src/base/service.rs:83:24 - | -83 | diesel::update(::table()) - | -------------- ^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::Identifiable` is not implemented for `::Table`, which is required by `::Table: IntoUpdateTarget` - | | - | required by a bound introduced by this call - | - = note: required for `::Table` to implement `IntoUpdateTarget` -note: required by a bound in `update` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_builder/functions.rs:80:18 - | -80 | pub fn update(source: T) -> UpdateStatement { - | ^^^^^^^^^^^^^^^^ required by this bound in `update` - -error[E0277]: the trait bound `::Table: HasTable` is not satisfied - --> src/base/service.rs:83:9 - | -83 | diesel::update(::table()) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `HasTable` is not implemented for `::Table` - -error[E0277]: the trait bound `::PrimaryKey: AppearsOnTable<_>` is not satisfied - --> src/base/service.rs:84:14 - | -84 | .filter(T::primary_key().eq(id)) - | ^^^^^^ the trait `AppearsOnTable<_>` is not implemented for `::PrimaryKey`, which is required by `UpdateStatement<_, _>: FilterDsl<_>` - | - = help: the following other types implement trait `AppearsOnTable`: - `&'a T` implements `AppearsOnTable` - `(T0, T1)` implements `AppearsOnTable` - `(T0, T1, T2)` implements `AppearsOnTable` - `(T0, T1, T2, T3)` implements `AppearsOnTable` - `(T0, T1, T2, T3, T4)` implements `AppearsOnTable` - `(T0, T1, T2, T3, T4, T5)` implements `AppearsOnTable` - `(T0, T1, T2, T3, T4, T5, T6)` implements `AppearsOnTable` - `(T0, T1, T2, T3, T4, T5, T6, T7)` implements `AppearsOnTable` - and 131 others - = note: required for `diesel::expression::operators::Eq<::PrimaryKey, diesel::expression::bound::Bound>` to implement `AppearsOnTable<_>` - = note: 1 redundant requirement hidden - = note: required for `Grouped::PrimaryKey, Bound>>` to implement `AppearsOnTable<_>` - = note: required for `UpdateStatement<_, _>` to implement `FilterDsl::PrimaryKey, diesel::expression::bound::Bound>>>` - = note: the full name for the type has been written to '/home/nicolaivds/GIT/OpenLayerHub/target/debug/deps/openlayerhub-1f7d339452a03941.long-type-9065444121950834043.txt' - = note: consider using `--verbose` to print the full type name to the console - -error[E0277]: the trait bound `::PrimaryKey: AppearsOnTable<_>` is not satisfied - --> src/base/service.rs:84:21 - | -84 | .filter(T::primary_key().eq(id)) - | ------ ^^^^^^^^^^^^^^^^^^^^^^^ the trait `AppearsOnTable<_>` is not implemented for `::PrimaryKey`, which is required by `UpdateStatement<_, _>: FilterDsl<_>` - | | - | required by a bound introduced by this call - | - = help: the following other types implement trait `AppearsOnTable`: - `&'a T` implements `AppearsOnTable` - `(T0, T1)` implements `AppearsOnTable` - `(T0, T1, T2)` implements `AppearsOnTable` - `(T0, T1, T2, T3)` implements `AppearsOnTable` - `(T0, T1, T2, T3, T4)` implements `AppearsOnTable` - `(T0, T1, T2, T3, T4, T5)` implements `AppearsOnTable` - `(T0, T1, T2, T3, T4, T5, T6)` implements `AppearsOnTable` - `(T0, T1, T2, T3, T4, T5, T6, T7)` implements `AppearsOnTable` - and 131 others - = note: required for `diesel::expression::operators::Eq<::PrimaryKey, diesel::expression::bound::Bound>` to implement `AppearsOnTable<_>` - = note: 1 redundant requirement hidden - = note: required for `Grouped::PrimaryKey, Bound>>` to implement `AppearsOnTable<_>` - = note: required for `UpdateStatement<_, _>` to implement `FilterDsl::PrimaryKey, diesel::expression::bound::Bound>>>` -note: required by a bound in `UpdateStatement::::filter` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_builder/update_statement/mod.rs:98:15 - | -96 | pub fn filter(self, predicate: Predicate) -> Filter - | ------ required by a bound in this associated function -97 | where -98 | Self: FilterDsl, - | ^^^^^^^^^^^^^^^^^^^^ required by this bound in `UpdateStatement::::filter` - = note: the full name for the type has been written to '/home/nicolaivds/GIT/OpenLayerHub/target/debug/deps/openlayerhub-1f7d339452a03941.long-type-9065444121950834043.txt' - = note: consider using `--verbose` to print the full type name to the console - -error[E0277]: the trait bound `&T: diesel::AsChangeset` is not satisfied - --> src/base/service.rs:85:18 - | -85 | .set(&entity) - | --- ^^^^^^^ the trait `diesel::AsChangeset` is not implemented for `&T` - | | - | required by a bound introduced by this call - | -note: required by a bound in `UpdateStatement::::set` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_builder/update_statement/mod.rs:38:12 - | -35 | pub fn set(self, values: V) -> UpdateStatement - | --- required by a bound in this associated function -... -38 | V: changeset::AsChangeset, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `UpdateStatement::::set` -help: consider removing the leading `&`-reference - | -85 - .set(&entity) -85 + .set(entity) - | - -error[E0277]: the trait bound `::Backend: DieselReserveSpecialization` is not satisfied - --> src/base/service.rs:86:25 - | -86 | .get_result(&mut conn) - | ---------- ^^^^^^^^^ the trait `DieselReserveSpecialization` is not implemented for `::Backend`, which is required by `UpdateStatement<_, _, _>: LoadQuery<'_, _, _>` - | | - | required by a bound introduced by this call - | - = note: required for `UpdateStatement<_, _, _, ReturningClause<_>>` to implement `QueryFragment<::Backend>` - = note: required for `UpdateStatement<_, _, _>` to implement `LoadQuery<'_, PooledConnection>, _>` -note: required by a bound in `get_result` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_dsl/mod.rs:1722:15 - | -1720 | fn get_result<'query, U>(self, conn: &mut Conn) -> QueryResult - | ---------- required by a bound in this associated function -1721 | where -1722 | Self: LoadQuery<'query, Conn, U>, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `RunQueryDsl::get_result` - -error[E0277]: `ReturningClause<_>` is no valid SQL fragment for the `::Backend` backend - --> src/base/service.rs:86:25 - | -86 | .get_result(&mut conn) - | ---------- ^^^^^^^^^ the trait `QueryFragment<::Backend, <::Backend as SqlDialect>::ReturningClause>` is not implemented for `ReturningClause<_>`, which is required by `UpdateStatement<_, _, _>: LoadQuery<'_, _, _>` - | | - | required by a bound introduced by this call - | - = note: this usually means that the `::Backend` database system does not support - this SQL syntax - = help: the following other types implement trait `QueryFragment`: - `ReturningClause` implements `QueryFragment` - `ReturningClause` implements `QueryFragment` - = note: required for `ReturningClause<_>` to implement `QueryFragment<::Backend>` - = note: 1 redundant requirement hidden - = note: required for `UpdateStatement<_, _, _, ReturningClause<_>>` to implement `QueryFragment<::Backend>` - = note: required for `UpdateStatement<_, _, _>` to implement `LoadQuery<'_, PooledConnection>, _>` -note: required by a bound in `get_result` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_dsl/mod.rs:1722:15 - | -1720 | fn get_result<'query, U>(self, conn: &mut Conn) -> QueryResult - | ---------- required by a bound in this associated function -1721 | where -1722 | Self: LoadQuery<'query, Conn, U>, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `RunQueryDsl::get_result` - -error[E0277]: the trait bound `Conn: LoadConnection` is not satisfied - --> src/base/service.rs:86:25 - | -86 | .get_result(&mut conn) - | ---------- ^^^^^^^^^ the trait `LoadConnection` is not implemented for `Conn`, which is required by `UpdateStatement<_, _, _>: LoadQuery<'_, _, _>` - | | - | required by a bound introduced by this call - | - = note: required for `PooledConnection>` to implement `LoadConnection` - = note: required for `UpdateStatement<_, _, _>` to implement `LoadQuery<'_, PooledConnection>, _>` -note: required by a bound in `get_result` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_dsl/mod.rs:1722:15 - | -1720 | fn get_result<'query, U>(self, conn: &mut Conn) -> QueryResult - | ---------- required by a bound in this associated function -1721 | where -1722 | Self: LoadQuery<'query, Conn, U>, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `RunQueryDsl::get_result` -help: consider further restricting this bound - | -50 | Conn: diesel::Connection + R2D2Connection + 'static + diesel::connection::LoadConnection, - | ++++++++++++++++++++++++++++++++++++ - -error[E0277]: the trait bound `::Table: SingleValue` is not satisfied - --> src/base/service.rs:86:25 - | -86 | .get_result(&mut conn) - | ---------- ^^^^^^^^^ the trait `SingleValue` is not implemented for `::Table`, which is required by `UpdateStatement<_, _, _>: LoadQuery<'_, _, _>` - | | - | required by a bound introduced by this call - | - = note: required for `::Table` to implement `SqlTypeOrSelectable` - = note: required for `T` to implement `FromSqlRow<::Table, ::Backend>` - = note: required for `UpdateStatement<_, _, _>` to implement `LoadQuery<'_, PooledConnection>, T>` -note: required by a bound in `get_result` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_dsl/mod.rs:1722:15 - | -1720 | fn get_result<'query, U>(self, conn: &mut Conn) -> QueryResult - | ---------- required by a bound in this associated function -1721 | where -1722 | Self: LoadQuery<'query, Conn, U>, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `RunQueryDsl::get_result` - -error[E0277]: the trait bound `::Table: diesel::Identifiable` is not satisfied - --> src/base/service.rs:83:9 - | -83 | diesel::update(::table()) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::Identifiable` is not implemented for `::Table`, which is required by `::Table: IntoUpdateTarget` - | - = note: required for `::Table` to implement `IntoUpdateTarget` - -error[E0277]: the trait bound `::Table: IntoUpdateTarget` is not satisfied - --> src/base/service.rs:92:24 - | -92 | diesel::delete(::table()) - | -------------- ^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::Identifiable` is not implemented for `::Table`, which is required by `::Table: IntoUpdateTarget` - | | - | required by a bound introduced by this call - | - = note: required for `::Table` to implement `IntoUpdateTarget` -note: required by a bound in `delete` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_builder/functions.rs:132:18 - | -132 | pub fn delete(source: T) -> DeleteStatement { - | ^^^^^^^^^^^^^^^^ required by this bound in `delete` - -error[E0277]: the trait bound `::Table: HasTable` is not satisfied - --> src/base/service.rs:92:9 - | -92 | diesel::delete(::table()) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `HasTable` is not implemented for `::Table` - -error[E0277]: the trait bound `::PrimaryKey: AppearsOnTable<_>` is not satisfied - --> src/base/service.rs:93:14 - | -93 | .filter(T::primary_key().eq(id)) - | ^^^^^^ the trait `AppearsOnTable<_>` is not implemented for `::PrimaryKey`, which is required by `DeleteStatement<_, _>: FilterDsl<_>` - | - = help: the following other types implement trait `AppearsOnTable`: - `&'a T` implements `AppearsOnTable` - `(T0, T1)` implements `AppearsOnTable` - `(T0, T1, T2)` implements `AppearsOnTable` - `(T0, T1, T2, T3)` implements `AppearsOnTable` - `(T0, T1, T2, T3, T4)` implements `AppearsOnTable` - `(T0, T1, T2, T3, T4, T5)` implements `AppearsOnTable` - `(T0, T1, T2, T3, T4, T5, T6)` implements `AppearsOnTable` - `(T0, T1, T2, T3, T4, T5, T6, T7)` implements `AppearsOnTable` - and 131 others - = note: required for `diesel::expression::operators::Eq<::PrimaryKey, diesel::expression::bound::Bound>` to implement `AppearsOnTable<_>` - = note: 1 redundant requirement hidden - = note: required for `Grouped::PrimaryKey, Bound>>` to implement `AppearsOnTable<_>` - = note: required for `DeleteStatement<_, _>` to implement `FilterDsl::PrimaryKey, diesel::expression::bound::Bound>>>` - = note: the full name for the type has been written to '/home/nicolaivds/GIT/OpenLayerHub/target/debug/deps/openlayerhub-1f7d339452a03941.long-type-9065444121950834043.txt' - = note: consider using `--verbose` to print the full type name to the console - -error[E0277]: the trait bound `::PrimaryKey: AppearsOnTable<_>` is not satisfied - --> src/base/service.rs:93:21 - | -93 | .filter(T::primary_key().eq(id)) - | ------ ^^^^^^^^^^^^^^^^^^^^^^^ the trait `AppearsOnTable<_>` is not implemented for `::PrimaryKey`, which is required by `DeleteStatement<_, _>: FilterDsl<_>` - | | - | required by a bound introduced by this call - | - = help: the following other types implement trait `AppearsOnTable`: - `&'a T` implements `AppearsOnTable` - `(T0, T1)` implements `AppearsOnTable` - `(T0, T1, T2)` implements `AppearsOnTable` - `(T0, T1, T2, T3)` implements `AppearsOnTable` - `(T0, T1, T2, T3, T4)` implements `AppearsOnTable` - `(T0, T1, T2, T3, T4, T5)` implements `AppearsOnTable` - `(T0, T1, T2, T3, T4, T5, T6)` implements `AppearsOnTable` - `(T0, T1, T2, T3, T4, T5, T6, T7)` implements `AppearsOnTable` - and 131 others - = note: required for `diesel::expression::operators::Eq<::PrimaryKey, diesel::expression::bound::Bound>` to implement `AppearsOnTable<_>` - = note: 1 redundant requirement hidden - = note: required for `Grouped::PrimaryKey, Bound>>` to implement `AppearsOnTable<_>` - = note: required for `DeleteStatement<_, _>` to implement `FilterDsl::PrimaryKey, diesel::expression::bound::Bound>>>` -note: required by a bound in `DeleteStatement::::filter` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_builder/delete_statement/mod.rs:113:15 - | -111 | pub fn filter(self, predicate: Predicate) -> Filter - | ------ required by a bound in this associated function -112 | where -113 | Self: FilterDsl, - | ^^^^^^^^^^^^^^^^^^^^ required by this bound in `DeleteStatement::::filter` - = note: the full name for the type has been written to '/home/nicolaivds/GIT/OpenLayerHub/target/debug/deps/openlayerhub-1f7d339452a03941.long-type-9065444121950834043.txt' - = note: consider using `--verbose` to print the full type name to the console - -error[E0277]: the trait bound `::Backend: DieselReserveSpecialization` is not satisfied - --> src/base/service.rs:94:22 - | -94 | .execute(&mut conn) - | ------- ^^^^^^^^^ the trait `DieselReserveSpecialization` is not implemented for `::Backend`, which is required by `DeleteStatement<_, _>: ExecuteDsl<_, _>` - | | - | required by a bound introduced by this call - | - = note: required for `DeleteStatement<_, _>` to implement `QueryFragment<::Backend>` - = note: required for `DeleteStatement<_, _>` to implement `ExecuteDsl>, ::Backend>` -note: required by a bound in `diesel::RunQueryDsl::execute` - --> /home/nicolaivds/.cargo/registry/src/index.crates.io-6f17d22bba15001f/diesel-2.2.7/src/query_dsl/mod.rs:1431:15 - | -1428 | fn execute(self, conn: &mut Conn) -> QueryResult - | ------- required by a bound in this associated function -... -1431 | Self: methods::ExecuteDsl, - | ^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `RunQueryDsl::execute` - -error[E0277]: the trait bound `::Table: diesel::Identifiable` is not satisfied - --> src/base/service.rs:92:9 - | -92 | diesel::delete(::table()) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::Identifiable` is not implemented for `::Table`, which is required by `::Table: IntoUpdateTarget` - | - = note: required for `::Table` to implement `IntoUpdateTarget` - -Some errors have detailed explanations: E0275, E0277. -For more information about an error, try `rustc --explain E0275`. -error: could not compile `openlayerhub` (bin "openlayerhub") due to 26 previous errors diff --git a/src/base/controller.rs b/src/base/controller.rs deleted file mode 100644 index 1d56956..0000000 --- a/src/base/controller.rs +++ /dev/null @@ -1,78 +0,0 @@ -use crate::base::{entity::BaseEntity, i_service::IBaseService}; -use anyhow::Result; -use axum::{extract::{Path, State}, http::StatusCode, response::IntoResponse, routing::get, Json, Router}; -use diesel::Identifiable; -use serde::Serialize; -use std::{marker::PhantomData, ops::Deref, sync::Arc}; - -pub struct BaseController -where - T: BaseEntity + Identifiable + Serialize + Send + Sync + 'static, - S: IBaseService + Send + Sync + 'static, -{ - service: S, - _marker: PhantomData, -} - -impl BaseController -where - T: BaseEntity + Identifiable + Serialize + Send + Sync + 'static, - S: IBaseService + Send + Sync + 'static, -{ - pub fn new(service: S) -> Self { - Self { - service, - _marker: PhantomData, - } - } - - pub async fn get_all(&self) -> Result { - let entities = self - .service - .get_all() - .await - .map_err(|err| err.to_string())?; - Ok((StatusCode::OK, Json(entities))) - } - - pub async fn get_by_id(&self, id: i32) -> Result { - let entity = self - .service - .get_by_id(id) - .await - .map_err(|err| err.to_string())?; - - match entity { - Some(entity) => Ok((StatusCode::OK, Json(entity))), - None => Err(format!("Entity with id {} not found.", id)) - } - } - - pub fn default_routes(controller: Arc, base_path: &str) -> Router - where - C: Deref + Send + Sync + 'static, - { - Router::new() - .route( - &format!("{}", base_path), - get(|State(controller): State>| async move { - controller - .get_all() - .await - .map_err(|err| (StatusCode::INTERNAL_SERVER_ERROR, Json(err))) - }), - ) - - .route( - // Add route for getting by ID (e.g., /:id) - &format!("{}/{{id}}", base_path), - get(|State(controller): State>, Path(id): Path| async move { - controller - .get_by_id(id) - .await - .map_err(|err| (StatusCode::NOT_FOUND, Json(err))) - }), - ) - .with_state(controller) - } -} diff --git a/src/base/entity.rs b/src/base/entity.rs deleted file mode 100644 index c52d72e..0000000 --- a/src/base/entity.rs +++ /dev/null @@ -1,16 +0,0 @@ -use serde::{Deserialize, Serialize}; - -pub trait BaseEntity { - fn id(&self) -> i32; -} - -#[derive(Serialize, Deserialize, Clone, Debug)] -pub struct Entity { - pub id: i32, -} - -impl BaseEntity for Entity { - fn id(&self) -> i32 { - self.id - } -} diff --git a/src/base/i_service.rs b/src/base/i_service.rs deleted file mode 100644 index af72c64..0000000 --- a/src/base/i_service.rs +++ /dev/null @@ -1,11 +0,0 @@ -use anyhow::{Error, Result}; -use async_trait::async_trait; - -#[async_trait] -pub trait IBaseService { - async fn get_all(&self) -> Result, Error>; - async fn get_by_id(&self, id: i32) -> Result, Error>; - async fn update(&self, entity: T) -> Result; - //async fn create(&self, entity: T) -> Result; - async fn delete(&self, id: i32) -> Result; -} diff --git a/src/base/mod.rs b/src/base/mod.rs deleted file mode 100644 index 4c2d42e..0000000 --- a/src/base/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub mod i_service; -pub mod service; -pub mod controller; -pub mod entity; diff --git a/src/base/service.rs b/src/base/service.rs deleted file mode 100644 index 64db363..0000000 --- a/src/base/service.rs +++ /dev/null @@ -1,89 +0,0 @@ -use std::marker::PhantomData; -use anyhow::Error; -use async_trait::async_trait; -use diesel::prelude::*; -use diesel::associations::HasTable; -use diesel::query_dsl::methods::{FindDsl, LoadQuery}; - -use crate::config::db::{get_connection, DbPool}; -use super::i_service::IBaseService; - -pub struct BaseService -where - T: Identifiable + Queryable + Send + Sync + 'static, - U: Table + HasTable + LoadQuery<'static, PgConnection, T> + Send + Sync + 'static, -{ - pool: DbPool, - _marker: PhantomData<(T, U)>, -} - -impl BaseService -where - T: Identifiable + Queryable + Send + Sync + 'static, - U: Table - + HasTable
- + LoadQuery<'static, PgConnection, T> - + Send - + Sync - + 'static, -{ - pub fn new(pool: DbPool) -> Self { - Self { - pool, - _marker: PhantomData, - } - } -} - -#[async_trait] -impl IBaseService for BaseService -where - T: Identifiable + Queryable + Send + Sync + 'static, - U: Table - + HasTable
- + LoadQuery<'static, PgConnection, T> - + FindDsl - + Send - + Sync - + 'static, - >::Output: LoadQuery<'static, PgConnection, T>, -{ - async fn get_all(&self) -> Result, Error> { - let pool = self.pool.clone(); - - let result = tokio::task::spawn_blocking(move || { - let mut conn = get_connection(&pool).expect("Failed to get DB connection"); - U::table().load::(&mut conn) - }) - .await??; - - Ok(result) - } - - async fn get_by_id(&self, id: i32) -> Result, Error> { - let pool = self.pool.clone(); - - let result = tokio::task::spawn_blocking(move || { - let mut conn = get_connection(&pool).expect("Failed to get DB connection"); - U::table() - .find(id) - .get_result::(&mut conn) - .optional() - }) - .await??; - - Ok(result) - } - - async fn update(&self, entity: T) -> Result { - todo!() - } - - // async fn create(&self, entity: T) -> Result { - // todo!() - // } - - async fn delete(&self, id: i32) -> Result { - todo!() - } -} diff --git a/src/config/db.rs b/src/config/db.rs deleted file mode 100644 index f70acba..0000000 --- a/src/config/db.rs +++ /dev/null @@ -1,23 +0,0 @@ -use diesel::pg::PgConnection; -use diesel::r2d2::{self, ConnectionManager, Pool, PoolError}; - -use std::env; - -pub type DbPool = Pool>; - -pub fn establish_connection_pool() -> Result { - let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set"); - - let manager = ConnectionManager::::new(database_url); - Pool::builder().build(manager) -} - -pub fn get_connection( - pool: &DbPool, -) -> Result>, PoolError> { - pool.get() -} - -pub fn init_db() -> DbPool { - establish_connection_pool().expect("Failed to create connection pool") -} diff --git a/src/config/mod.rs b/src/config/mod.rs deleted file mode 100644 index dec1023..0000000 --- a/src/config/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod db; diff --git a/src/crud/handlers.rs b/src/crud/handlers.rs new file mode 100644 index 0000000..80c66f1 --- /dev/null +++ b/src/crud/handlers.rs @@ -0,0 +1,88 @@ +use actix_web::{web, HttpResponse, Responder}; +use diesel::pg::PgConnection; +use diesel::r2d2::{self, ConnectionManager}; +use serde::Deserialize; + +use super::r#trait::CrudEntity; + +type DbPool = r2d2::Pool>; + +#[derive(Deserialize)] +struct Pagination { + limit: Option, + offset: Option, +} + +pub async fn get_all( + pool: web::Data, + query: web::Query, +) -> impl Responder { + let mut conn = match pool.get() { + Ok(conn) => conn, + Err(_) => return HttpResponse::InternalServerError().finish(), + }; + match T::find_all(&mut conn, query.limit, query.offset) { + Ok(items) => HttpResponse::Ok().json(items), + Err(_) => HttpResponse::InternalServerError().finish(), + } +} + +pub async fn get_one( + pool: web::Data, + id: web::Path, +) -> impl Responder { + let mut conn = match pool.get() { + Ok(conn) => conn, + Err(_) => return HttpResponse::InternalServerError().finish(), + }; + match T::find_by_id(&mut conn, id.into_inner()) { + Ok(item) => HttpResponse::Ok().json(item), + Err(diesel::result::Error::NotFound) => HttpResponse::NotFound().finish(), + Err(_) => HttpResponse::InternalServerError().finish(), + } +} + +pub async fn create( + pool: web::Data, + item: web::Json, +) -> impl Responder { + let mut conn = match pool.get() { + Ok(conn) => conn, + Err(_) => return HttpResponse::InternalServerError().finish(), + }; + match T::insert(&mut conn, item.into_inner()) { + Ok(created) => HttpResponse::Created().json(created), + Err(_) => HttpResponse::InternalServerError().finish(), + } +} + +pub async fn update( + pool: web::Data, + id: web::Path, + item: web::Json, +) -> impl Responder { + let mut conn = match pool.get() { + Ok(conn) => conn, + Err(_) => return HttpResponse::InternalServerError().finish(), + }; + match T::update(&mut conn, id.into_inner(), item.into_inner()) { + Ok(updated) => HttpResponse::Ok().json(updated), + Err(diesel::result::Error::NotFound) => HttpResponse::NotFound().finish(), + Err(_) => HttpResponse::InternalServerError().finish(), + } +} + +pub async fn delete( + pool: web::Data, + id: web::Path, +) -> impl Responder { + let mut conn = match pool.get() { + Ok(conn) => conn, + Err(_) => return HttpResponse::InternalServerError().finish(), + }; + match T::delete(&mut conn, id.into_inner()) { + Ok(_) => HttpResponse::NoContent().finish(), + Err(diesel::result::Error::NotFound) => HttpResponse::NotFound().finish(), + Err(_) => HttpResponse::InternalServerError().finish(), + } +} \ No newline at end of file diff --git a/src/crud/mod.rs b/src/crud/mod.rs new file mode 100644 index 0000000..2f60a8e --- /dev/null +++ b/src/crud/mod.rs @@ -0,0 +1,2 @@ +pub mod r#trait; +pub mod handlers; \ No newline at end of file diff --git a/src/crud/trait.rs b/src/crud/trait.rs new file mode 100644 index 0000000..7744720 --- /dev/null +++ b/src/crud/trait.rs @@ -0,0 +1,14 @@ +use diesel::prelude::*; +use serde::{de::DeserializeOwned, Serialize}; + +pub trait CrudEntity: Sized + Serialize { + type Id: Serialize + DeserializeOwned + 'static; + type CreateInput: DeserializeOwned + 'static; + type UpdateInput: DeserializeOwned + 'static; + + fn find_all(conn: &mut PgConnection, limit: Option, offset: Option) -> Result, diesel::result::Error>; + fn find_by_id(conn: &mut PgConnection, id: Self::Id) -> Result; + fn insert(conn: &mut PgConnection, item: Self::CreateInput) -> Result; + fn update(conn: &mut PgConnection, id: Self::Id, item: Self::UpdateInput) -> Result; + fn delete(conn: &mut PgConnection, id: Self::Id) -> Result; +} \ No newline at end of file diff --git a/src/db/connection.rs b/src/db/connection.rs new file mode 100644 index 0000000..950af8f --- /dev/null +++ b/src/db/connection.rs @@ -0,0 +1,14 @@ +use diesel::pg::PgConnection; +use diesel::r2d2::{self, ConnectionManager}; +use std::env; + +pub type Pool = r2d2::Pool>; + +pub fn establish_connection_pool() -> Pool { + dotenv::dotenv().ok(); + let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set"); + let manager = ConnectionManager::::new(database_url); + r2d2::Pool::builder() + .build(manager) + .expect("Failed to create pool") +} \ No newline at end of file diff --git a/src/db/mod.rs b/src/db/mod.rs new file mode 100644 index 0000000..dab006e --- /dev/null +++ b/src/db/mod.rs @@ -0,0 +1 @@ +pub mod connection; \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 1ab6462..2f5acc6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,51 +1,24 @@ -use std::sync::Arc; +use actix_web::{web, App, HttpServer}; +use db::connection::establish_connection_pool; +use models::user::User; +use routes::crud::add_crud_routes; -use crate::routes::user::controller::UserController; -use crate::routes::user::model::{User, UserResponse}; -use crate::routes::user::service::UserService; -use axum::http::StatusCode; -use axum::routing::get; -use axum::{serve, Router}; -use config::db::init_db; -use dotenvy::dotenv; -use tokio::net::TcpListener; -use utoipa::OpenApi; -use utoipa_swagger_ui::SwaggerUi; - -mod base; -mod config; +mod crud; +mod models; +mod db; mod routes; +mod schema; -#[tokio::main] -async fn main() { - dotenv().ok(); - let pool = init_db(); +#[actix_web::main] +async fn main() -> std::io::Result<()> { + let pool = establish_connection_pool(); - let hc_router = Router::new().route("/", get(health_check)); - - let user_service = UserService::new(pool); - let user_controller = Arc::new(UserController::new(user_service)); - - let app = Router::new() - .merge(UserController::routes(user_controller.clone())) - .merge(SwaggerUi::new("/swagger-ui").url("/api-docs/openapi.json", ApiDoc::openapi())) - .nest("/hc", hc_router); - - let listener = TcpListener::bind("0.0.0.0:3000").await.unwrap(); - serve(listener, app).await.unwrap(); - - async fn health_check() -> StatusCode { - StatusCode::OK - } - - #[derive(OpenApi)] - #[openapi( - components( - schemas(User, UserResponse) - ), - tags( - (name = "users", description = "User management endpoints") - ) - )] - struct ApiDoc; + HttpServer::new(move || { + let mut app = App::new().app_data(web::Data::new(pool.clone())); + app = add_crud_routes::(app, "/users"); + app + }) + .bind("0.0.0.0:3000")? + .run() + .await } diff --git a/src/models/mod.rs b/src/models/mod.rs new file mode 100644 index 0000000..018ff2e --- /dev/null +++ b/src/models/mod.rs @@ -0,0 +1 @@ +pub mod user; \ No newline at end of file diff --git a/src/models/user.rs b/src/models/user.rs new file mode 100644 index 0000000..e10cefc --- /dev/null +++ b/src/models/user.rs @@ -0,0 +1,63 @@ +use diesel::prelude::*; +use serde::{Serialize, Deserialize}; +use crate::{crud::r#trait::CrudEntity, schema::users}; + +#[derive(Serialize, Deserialize, Queryable, Insertable)] +#[diesel(table_name = users)] +pub struct User { + id: i32, + name: String, + email: String, +} + +#[derive(Deserialize, Insertable)] +#[diesel(table_name = users)] +pub struct NewUser { + name: String, + email: String, +} + +#[derive(Deserialize, AsChangeset)] +#[diesel(table_name = users)] +pub struct UpdateUser { + name: String, + email: String, +} + +impl CrudEntity for User { + type Id = i32; + type CreateInput = NewUser; + type UpdateInput = UpdateUser; // Changed from User to UpdateUser + + fn find_all(conn: &mut PgConnection, limit: Option, offset: Option) -> Result, diesel::result::Error> { + use crate::schema::users::dsl::*; + let mut query = users.into_boxed(); + if let Some(l) = limit { + query = query.limit(l); + } + if let Some(o) = offset { + query = query.offset(o); + } + query.load::(conn) + } + + fn find_by_id(conn: &mut PgConnection, id: Self::Id) -> Result { + use crate::schema::users::dsl::*; + users.filter(id.eq(id)).first::(conn) + } + + fn insert(conn: &mut PgConnection, item: Self::CreateInput) -> Result { + use crate::schema::users; + diesel::insert_into(users::table).values(&item).get_result(conn) + } + + fn update(conn: &mut PgConnection, id: Self::Id, item: Self::UpdateInput) -> Result { + use crate::schema::users::dsl::*; + diesel::update(users.filter(id.eq(id))).set(&item).get_result(conn) + } + + fn delete(conn: &mut PgConnection, id: Self::Id) -> Result { + use crate::schema::users::dsl::*; + diesel::delete(users.filter(id.eq(id))).execute(conn) + } +} \ No newline at end of file diff --git a/src/routes/crud.rs b/src/routes/crud.rs new file mode 100644 index 0000000..215bb89 --- /dev/null +++ b/src/routes/crud.rs @@ -0,0 +1,24 @@ +use actix_web::{dev::{ServiceFactory, ServiceRequest}, web, App}; +use crate::crud::{handlers, r#trait::CrudEntity}; + +pub fn add_crud_routes(mut app: App, path: &str) -> App +where + T::Id: serde::de::DeserializeOwned + serde::Serialize + 'static, + T::CreateInput: serde::de::DeserializeOwned + 'static, + T::UpdateInput: serde::de::DeserializeOwned + 'static, + + + T: ServiceFactory +{ + app = app.service( + web::resource(path) + .route(web::get().to(handlers::get_all::)) + .route(web::post().to(handlers::create::)), + ); + app.service( + web::resource(&format!("{}/{{id}}", path)) + .route(web::get().to(handlers::get_one::)) + .route(web::put().to(handlers::update::)) + .route(web::delete().to(handlers::delete::)), + ) +} \ No newline at end of file diff --git a/src/routes/mod.rs b/src/routes/mod.rs index 018ff2e..2285e56 100644 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -1 +1 @@ -pub mod user; \ No newline at end of file +pub mod crud; \ No newline at end of file diff --git a/src/routes/user/controller.rs b/src/routes/user/controller.rs deleted file mode 100644 index dffd88a..0000000 --- a/src/routes/user/controller.rs +++ /dev/null @@ -1,44 +0,0 @@ -use std::ops::Deref; -use std::sync::Arc; - -use crate::base::controller::BaseController; -use axum::Router; - -use super::model::User; -use super::service::UserService; - -pub struct UserController { - base_controller: BaseController, -} - -impl Deref for UserController { - type Target = BaseController; - - fn deref(&self) -> &Self::Target { - &self.base_controller - } -} - -impl UserController { - pub fn new(service: UserService) -> Self { - Self { - base_controller: BaseController::new(service), - } - } - - pub fn routes(controller: Arc) -> Router { - BaseController::default_routes(controller, "/users") - } - - /* - async fn get_users( - State(controller): State>, - ) -> Result)> { - controller - .base_controller - .get_all() - .await - .map_err(|err| (StatusCode::INTERNAL_SERVER_ERROR, Json(err))) - } - */ -} diff --git a/src/routes/user/mod.rs b/src/routes/user/mod.rs deleted file mode 100644 index f32a12d..0000000 --- a/src/routes/user/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub mod model; -pub mod schema; -pub mod service; -pub mod controller; \ No newline at end of file diff --git a/src/routes/user/model.rs b/src/routes/user/model.rs deleted file mode 100644 index 9497b64..0000000 --- a/src/routes/user/model.rs +++ /dev/null @@ -1,35 +0,0 @@ -use super::schema::users; -use crate::base::entity::BaseEntity; -use diesel::prelude::*; -use serde::{Deserialize, Serialize}; -use utoipa::ToSchema; - -#[derive(Debug, Clone, Serialize, Deserialize, Queryable, Identifiable, ToSchema)] -#[diesel(table_name = users, primary_key(id))] -pub struct User { - pub id: i32, - pub name: String, - pub email: String, -} - -#[derive(Debug, Serialize, ToSchema)] -pub struct UserResponse { - pub id: i32, - pub name: String, - pub email: String, -} - -impl BaseEntity for User { - fn id(&self) -> i32 { - self.id - } -} - -impl Identifiable for User { - type Id = i32; - - fn id(self) -> Self::Id { - self.id - } -} - diff --git a/src/routes/user/schema.rs b/src/routes/user/schema.rs deleted file mode 100644 index 3fb4ae2..0000000 --- a/src/routes/user/schema.rs +++ /dev/null @@ -1,9 +0,0 @@ -use diesel::table; - -table! { - users (id) { - id -> Integer, - name -> Varchar, - email -> Varchar, - } -} \ No newline at end of file diff --git a/src/routes/user/service.rs b/src/routes/user/service.rs deleted file mode 100644 index d4edd29..0000000 --- a/src/routes/user/service.rs +++ /dev/null @@ -1,5 +0,0 @@ -use crate::base::service::BaseService; -use super::model::User; -use super::schema::users; - -pub type UserService = BaseService; \ No newline at end of file