From e99d58eda3c3465716a475a1297557aa8bf34523 Mon Sep 17 00:00:00 2001 From: Christian Binzer Date: Sat, 24 Feb 2024 21:59:09 +0100 Subject: [PATCH 1/7] Add shuttle secret store source --- Cargo.lock | 823 ++++++++++++++++++++++++++++++++-- Cargo.toml | 4 +- src/lib.rs | 4 + src/shuttle_secret_store.rs | 91 ++++ tests/shuttle_secret_store.rs | 54 +++ 5 files changed, 945 insertions(+), 31 deletions(-) create mode 100644 src/shuttle_secret_store.rs create mode 100644 tests/shuttle_secret_store.rs diff --git a/Cargo.lock b/Cargo.lock index 81b57ecc..9841189c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -32,6 +32,34 @@ dependencies = [ "libc", ] +[[package]] +name = "anyhow" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + [[package]] name = "async-trait" version = "0.1.74" @@ -40,7 +68,7 @@ checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.50", ] [[package]] @@ -49,6 +77,51 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http", + "http-body", + "hyper", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http", + "http-body", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + [[package]] name = "backtrace" version = "0.3.69" @@ -142,6 +215,18 @@ dependencies = [ "windows-targets 0.52.0", ] +[[package]] +name = "comfy-table" +version = "6.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e959d788268e3bf9d35ace83e81b124190378e4c91c9067524675e33394b8ba" +dependencies = [ + "crossterm 0.26.1", + "strum 0.24.1", + "strum_macros 0.24.3", + "unicode-width", +] + [[package]] name = "config" version = "0.14.0" @@ -165,6 +250,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", + "shuttle-secrets", "temp-env", "tokio", "toml", @@ -247,6 +333,47 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossterm" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13" +dependencies = [ + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" +dependencies = [ + "bitflags 2.4.1", + "crossterm_winapi", + "libc", + "mio", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + [[package]] name = "crunchy" version = "0.2.2" @@ -269,6 +396,15 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + [[package]] name = "digest" version = "0.10.7" @@ -288,6 +424,12 @@ dependencies = [ "const-random", ] +[[package]] +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" + [[package]] name = "encoding_rs" version = "0.8.33" @@ -310,7 +452,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -328,7 +470,7 @@ dependencies = [ "cfg-if", "libc", "redox_syscall 0.3.5", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -435,7 +577,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.50", ] [[package]] @@ -485,8 +627,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] @@ -556,6 +700,12 @@ dependencies = [ "http", ] +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "hermit-abi" version = "0.3.3" @@ -620,6 +770,18 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + [[package]] name = "hyper-tls" version = "0.5.0" @@ -713,6 +875,15 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.9" @@ -739,6 +910,21 @@ dependencies = [ "serde", ] +[[package]] +name = "jsonwebtoken" +version = "9.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7ea04a7c5c055c175f189b6dc6ba036fd62306b58c66c9f6389036c503a3f4" +dependencies = [ + "base64", + "js-sys", + "pem", + "ring", + "serde", + "serde_json", + "simple_asn1", +] + [[package]] name = "kqueue" version = "1.0.8" @@ -802,6 +988,12 @@ dependencies = [ "serde", ] +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + [[package]] name = "memchr" version = "2.6.4" @@ -848,7 +1040,7 @@ dependencies = [ "libc", "log", "wasi", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -913,7 +1105,33 @@ dependencies = [ "log", "mio", "walkdir", - "windows-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", ] [[package]] @@ -973,7 +1191,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.50", ] [[package]] @@ -994,6 +1212,63 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "opentelemetry" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e32339a5dc40459130b3bd269e9892439f55b33e772d2a9d402a789baaf4e8a" +dependencies = [ + "futures-core", + "futures-sink", + "indexmap 2.2.2", + "js-sys", + "once_cell", + "pin-project-lite", + "thiserror", + "urlencoding", +] + +[[package]] +name = "opentelemetry-http" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f51189ce8be654f9b5f7e70e49967ed894e84a06fc35c6c042e64ac1fc5399e" +dependencies = [ + "async-trait", + "bytes", + "http", + "opentelemetry", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f16aec8a98a457a52664d69e0091bac3a0abd18ead9b641cb00202ba4e0efe4" +dependencies = [ + "async-trait", + "crossbeam-channel", + "futures-channel", + "futures-executor", + "futures-util", + "glob", + "once_cell", + "opentelemetry", + "ordered-float", + "percent-encoding", + "rand", + "thiserror", +] + +[[package]] +name = "ordered-float" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a76df7075c7d4d01fdcb46c912dd17fba5b60c78ea480b475f2b6ab6f666584e" +dependencies = [ + "num-traits", +] + [[package]] name = "ordered-multimap" version = "0.7.1" @@ -1033,6 +1308,16 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +[[package]] +name = "pem" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b8fcc794035347fb64beda2d3b462595dd2753e3f268d89c5aae77e8cf2c310" +dependencies = [ + "base64", + "serde", +] + [[package]] name = "percent-encoding" version = "2.3.0" @@ -1070,7 +1355,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn", + "syn 2.0.50", ] [[package]] @@ -1101,7 +1386,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.50", ] [[package]] @@ -1122,6 +1407,12 @@ version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +[[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.17" @@ -1136,18 +1427,50 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.69" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] +[[package]] +name = "prost" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "prost-types" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" +dependencies = [ + "prost", +] + [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -1240,6 +1563,21 @@ dependencies = [ "winreg", ] +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "ron" version = "0.8.1" @@ -1279,7 +1617,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1291,6 +1629,12 @@ dependencies = [ "base64", ] +[[package]] +name = "rustversion" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + [[package]] name = "ryu" version = "1.0.15" @@ -1312,7 +1656,7 @@ version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" dependencies = [ - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1350,24 +1694,33 @@ dependencies = [ "libc", ] +[[package]] +name = "semver" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +dependencies = [ + "serde", +] + [[package]] name = "serde" -version = "1.0.189" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.189" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.50", ] [[package]] @@ -1425,6 +1778,128 @@ dependencies = [ "digest", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shuttle-common" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35d5a2b93acba36088bfccd2441d25667820c58122adfa39c47c8495d0aec25e" +dependencies = [ + "anyhow", + "bytes", + "chrono", + "comfy-table", + "crossterm 0.27.0", + "headers", + "http", + "http-body", + "jsonwebtoken", + "opentelemetry", + "opentelemetry-http", + "pin-project", + "semver", + "serde", + "serde_json", + "strum 0.25.0", + "tower", + "tracing", + "tracing-opentelemetry", + "tracing-subscriber", + "url", + "uuid", + "zeroize", +] + +[[package]] +name = "shuttle-proto" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8701d29e4733306b839e75695b7a7add3e8e3358e8f237e631bdf44e3ed39b1c" +dependencies = [ + "futures-core", + "http", + "prost", + "prost-types", + "shuttle-common", + "tonic", + "tower", +] + +[[package]] +name = "shuttle-secrets" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0bc8f4735874902bb3d2bb21fb379ef6cbdc27e419d0a9b290820813b221b61" +dependencies = [ + "async-trait", + "shuttle-service", +] + +[[package]] +name = "shuttle-service" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b277dad0360546d77338fbd5452c61e77b4a149ff1f55175a659d6433251d484" +dependencies = [ + "anyhow", + "async-trait", + "serde", + "shuttle-common", + "shuttle-proto", + "strfmt", + "thiserror", +] + +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "simple_asn1" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror", + "time", +] + [[package]] name = "slab" version = "0.4.9" @@ -1457,7 +1932,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1466,11 +1941,69 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "strfmt" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a8348af2d9fc3258c8733b8d9d8db2e56f54b2363a4b5b81585c7875ed65e65" + +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" + +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +dependencies = [ + "strum_macros 0.25.3", +] + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "strum_macros" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.50", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn" -version = "2.0.38" +version = "2.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +checksum = "74f1bdc9872430ce9b75da68329d1c1746faf50ffac5f19e02b71e37ff881ffb" dependencies = [ "proc-macro2", "quote", @@ -1523,7 +2056,7 @@ dependencies = [ "fastrand", "redox_syscall 0.3.5", "rustix", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1543,7 +2076,48 @@ checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.50", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", ] [[package]] @@ -1584,7 +2158,17 @@ dependencies = [ "pin-project-lite", "socket2 0.5.5", "tokio-macros", - "windows-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", ] [[package]] @@ -1595,7 +2179,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.50", ] [[package]] @@ -1680,6 +2264,59 @@ dependencies = [ "winnow", ] +[[package]] +name = "tonic" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64", + "bytes", + "h2", + "http", + "http-body", + "hyper", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost", + "tokio", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + [[package]] name = "tower-service" version = "0.3.2" @@ -1694,9 +2331,21 @@ checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ "log", "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + [[package]] name = "tracing-core" version = "0.1.32" @@ -1704,6 +2353,60 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-opentelemetry" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c67ac25c5407e7b961fafc6f7e9aa5958fd297aada2d20fa2ae1737357e55596" +dependencies = [ + "js-sys", + "once_cell", + "opentelemetry", + "opentelemetry_sdk", + "smallvec", + "tracing", + "tracing-core", + "tracing-log", + "tracing-subscriber", + "web-time", +] + +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "serde", + "serde_json", + "sharded-slab", + "thread_local", + "tracing-core", + "tracing-serde", ] [[package]] @@ -1779,6 +2482,18 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "2.4.1" @@ -1788,14 +2503,37 @@ dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + [[package]] name = "utf-8" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "uuid" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a" +dependencies = [ + "getrandom", + "serde", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + [[package]] name = "vcpkg" version = "0.2.15" @@ -1885,7 +2623,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.50", "wasm-bindgen-shared", ] @@ -1919,7 +2657,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.50", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -1940,6 +2678,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "winapi" version = "0.3.9" @@ -1989,6 +2737,15 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -2119,7 +2876,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ "cfg-if", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -2130,3 +2887,9 @@ checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" dependencies = [ "linked-hash-map", ] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" diff --git a/Cargo.toml b/Cargo.toml index ca49961d..f7a1f5d4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,7 @@ json5 = ["json5_rs", "serde/derive"] convert-case = ["convert_case"] preserve_order = ["indexmap", "toml?/preserve_order", "serde_json?/preserve_order", "ron?/indexmap"] async = ["async-trait"] +shuttle = ["dep:shuttle-secrets"] [dependencies] lazy_static = "1.4" @@ -38,13 +39,14 @@ ron = { version = "0.8", optional = true } json5_rs = { version = "0.4", optional = true, package = "json5" } indexmap = { version = "2.2", features = ["serde"], optional = true } convert_case = { version = "0.6", optional = true } +shuttle-secrets = { version = "0.39.0", optional = true } pathdiff = "0.2" [dev-dependencies] serde_derive = "1.0" float-cmp = "0.9" chrono = { version = "0.4", features = ["serde"] } -tokio = { version = "1", features = ["rt-multi-thread", "macros", "fs", "io-util", "time"]} +tokio = { version = "1", features = ["rt-multi-thread", "macros", "fs", "io-util", "time"] } warp = "0.3" futures = "0.3" reqwest = "0.11" diff --git a/src/lib.rs b/src/lib.rs index b618e75b..dca037d6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -32,6 +32,7 @@ mod path; mod ser; mod source; mod value; +mod shuttle_secret_store; pub use crate::builder::ConfigBuilder; pub use crate::config::Config; @@ -52,3 +53,6 @@ pub use crate::builder::AsyncConfigBuilder; // Re-export #[cfg(feature = "convert-case")] pub use convert_case::Case; + +#[cfg(feature = "shuttle")] +pub use shuttle_secret_store::ShuttleSecretStore; diff --git a/src/shuttle_secret_store.rs b/src/shuttle_secret_store.rs new file mode 100644 index 00000000..2a7cb10e --- /dev/null +++ b/src/shuttle_secret_store.rs @@ -0,0 +1,91 @@ +use convert_case::Case; + +#[cfg(feature = "shuttle")] +use shuttle_secrets::SecretStore; + +use crate::{ConfigError, Environment, Map, Source, Value}; + +/// A source for the [SecretStore](https://docs.rs/shuttle-secrets/0.39.0/shuttle_secrets/struct.SecretStore.html) +/// of [shuttle.rs](https://www.shuttle.rs/). It is based on the [Environment] source and offers all +/// the features that Environment provides. +#[derive(Clone, Debug, Default)] +pub struct ShuttleSecretStore { + environment: Environment, +} + +impl ShuttleSecretStore { + pub fn new(secret_store: &SecretStore) -> Self { + let mut secrets_map: Map = Map::new(); + for (key, value) in secret_store.clone().into_iter() { + secrets_map.insert(key, value); + } + + Self { + environment: Environment::default().source(Some(secrets_map)), + } + } + + /// See [Environment::prefix] + pub fn prefix(mut self, prefix: &str) -> Self { + self.environment = self.environment.prefix(prefix); + self + } + + /// See [Environment::convert_case] + pub fn convert_case(mut self, case: Case) -> Self { + self.environment = self.environment.convert_case(case); + self + } + + /// See [Environment::prefix_separator] + pub fn prefix_separator(mut self, separator: &str) -> Self { + self.environment = self.environment.prefix_separator(separator); + self + } + + /// See [Environment::separator] + pub fn separator(mut self, separator: &str) -> Self { + self.environment = self.environment.separator(separator); + self + } + + /// See [Environment::list_separator] + pub fn list_separator(mut self, separator: &str) -> Self { + self.environment = self.environment.list_separator(separator); + self + } + + /// See [Environment::with_list_parse_key] + pub fn with_list_parse_key(mut self, key: &str) -> Self { + self.environment = self.environment.with_list_parse_key(key); + self + } + + /// See [Environment::ignore_empty] + pub fn ignore_empty(mut self, ignore: bool) -> Self { + self.environment = self.environment.ignore_empty(ignore); + self + } + + /// See [Environment::try_parsing] + pub fn try_parsing(mut self, try_parsing: bool) -> Self { + self.environment = self.environment.try_parsing(try_parsing); + self + } + + /// See [Environment::keep_prefix] + pub fn keep_prefix(mut self, keep: bool) -> Self { + self.environment = self.environment.keep_prefix(keep); + self + } +} + +impl Source for ShuttleSecretStore { + fn clone_into_box(&self) -> Box { + Box::new((*self).clone()) + } + + fn collect(&self) -> Result, ConfigError> { + self.environment.collect() + } +} \ No newline at end of file diff --git a/tests/shuttle_secret_store.rs b/tests/shuttle_secret_store.rs new file mode 100644 index 00000000..c98098d7 --- /dev/null +++ b/tests/shuttle_secret_store.rs @@ -0,0 +1,54 @@ +use std::collections::BTreeMap; + +use serde_derive::Deserialize; +use shuttle_secrets::SecretStore; + +use config::{Config, ShuttleSecretStore}; + +#[derive(Deserialize, Debug, PartialEq)] +pub struct MyAppConfiguration { + pub authentication: AuthenticationSettings, +} + +#[derive(Deserialize, Debug, PartialEq)] +pub struct AuthenticationSettings { + pub token_secret: String, + pub github: GitHubSettings, +} + +#[derive(Deserialize, Debug, PartialEq)] +pub struct GitHubSettings { + pub client_id: String, + pub client_secret: String, +} + +#[test] +#[cfg(feature = "shuttle")] +fn test_read_secrets_from_store() { + let secrets = BTreeMap::from([ + ("MY_APP_AUTHENTICATION__TOKEN_SECRET".to_owned(), "my_secret".to_owned().into()), + ("MY_APP_AUTHENTICATION__GITHUB__CLIENT_ID".to_owned(), "my_client_id".to_owned().into()), + ("MY_APP_AUTHENTICATION__GITHUB__CLIENT_SECRET".to_owned(), "my_client_secret".to_owned().into()), + ]); + let secret_store = SecretStore::new(secrets); + let config = Config::builder() + .add_source(ShuttleSecretStore::new(&secret_store) + .prefix("MY_APP") + .prefix_separator("_") + .separator("__") + ) + .build() + .unwrap() + .try_deserialize::() + .unwrap(); + + assert_eq!(config, MyAppConfiguration { + authentication: AuthenticationSettings { + token_secret: "my_secret".to_string(), + github: GitHubSettings { + client_id: "my_client_id".to_string(), + client_secret: "my_client_secret".to_string(), + }, + } + }) +} \ No newline at end of file From bf2f4cf907243370a40a3b4f20da0ad4be52766c Mon Sep 17 00:00:00 2001 From: Christian Binzer Date: Sun, 25 Feb 2024 16:17:38 +0100 Subject: [PATCH 2/7] Add shuttle secret store source example to docs --- src/shuttle_secret_store.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/shuttle_secret_store.rs b/src/shuttle_secret_store.rs index 2a7cb10e..ab32aa0d 100644 --- a/src/shuttle_secret_store.rs +++ b/src/shuttle_secret_store.rs @@ -8,6 +8,40 @@ use crate::{ConfigError, Environment, Map, Source, Value}; /// A source for the [SecretStore](https://docs.rs/shuttle-secrets/0.39.0/shuttle_secrets/struct.SecretStore.html) /// of [shuttle.rs](https://www.shuttle.rs/). It is based on the [Environment] source and offers all /// the features that Environment provides. +/// # Example +/// ```ignore +/// #[derive(Deserialize, Debug, PartialEq)] +/// pub struct MyAppConfiguration { +/// pub authentication: AuthenticationSettings, +/// } +/// +/// #[derive(Deserialize, Debug, PartialEq)] +/// pub struct AuthenticationSettings { +/// pub token_secret: String, +/// } +/// +/// #[shuttle_runtime::main] +/// async fn main( +/// #[shuttle_secrets::Secrets] secret_store: SecretStore, // includes MY_APP_AUTHENTICATION__TOKEN_SECRET=my_secret +/// ) -> ShuttleActixWeb { +/// let service_config = move |cfg: &mut ServiceConfig| { +/// let my_config = Config::builder() +/// .add_source( +/// ShuttleSecretStore::new(&secret_store) +/// .prefix("MY_APP") +/// .prefix_separator("_") +/// .separator("__"), +/// ) +/// .build() +/// .unwrap() +/// .try_deserialize::() +/// .unwrap(); +/// cfg.app_data(Data::new(my_config)); +/// }; +/// +/// Ok(service_config.into()) +/// } +/// ``` #[derive(Clone, Debug, Default)] pub struct ShuttleSecretStore { environment: Environment, From cf63663f1d56b3a0a52d1ee58d9e05e4b7caf01b Mon Sep 17 00:00:00 2001 From: Christian Binzer Date: Sun, 25 Feb 2024 17:28:27 +0100 Subject: [PATCH 3/7] Set shuttle feature in module level --- src/lib.rs | 2 ++ src/shuttle_secret_store.rs | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index dca037d6..cff04c7d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -32,6 +32,8 @@ mod path; mod ser; mod source; mod value; + +#[cfg(feature = "shuttle")] mod shuttle_secret_store; pub use crate::builder::ConfigBuilder; diff --git a/src/shuttle_secret_store.rs b/src/shuttle_secret_store.rs index ab32aa0d..cd3b05a3 100644 --- a/src/shuttle_secret_store.rs +++ b/src/shuttle_secret_store.rs @@ -1,6 +1,5 @@ use convert_case::Case; -#[cfg(feature = "shuttle")] use shuttle_secrets::SecretStore; use crate::{ConfigError, Environment, Map, Source, Value}; From f2dd9798c8b116c57e99b08fb40573bfae6ae2ac Mon Sep 17 00:00:00 2001 From: Christian Binzer Date: Sun, 25 Feb 2024 17:45:29 +0100 Subject: [PATCH 4/7] Add shuttle secrets source to main docs --- src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib.rs b/src/lib.rs index cff04c7d..71ee1880 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,6 +8,7 @@ //! - Another Config instance //! - Files: TOML, JSON, YAML, INI, RON, JSON5 and custom ones defined with Format trait //! - Manual, programmatic override (via a `.set` method on the Config instance) +//! - [Shuttle secrets](https://docs.rs/shuttle-secrets/0.39.0/shuttle_secrets/index.html) //! //! Additionally, Config supports: //! From 9e4e18e7647e1b0e3fa4450d8d33f6414191c822 Mon Sep 17 00:00:00 2001 From: Christian Binzer Date: Sun, 25 Feb 2024 17:47:25 +0100 Subject: [PATCH 5/7] Change shuttle secrets crate url in docs --- src/lib.rs | 2 +- src/shuttle_secret_store.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 71ee1880..da3044cb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,7 +8,7 @@ //! - Another Config instance //! - Files: TOML, JSON, YAML, INI, RON, JSON5 and custom ones defined with Format trait //! - Manual, programmatic override (via a `.set` method on the Config instance) -//! - [Shuttle secrets](https://docs.rs/shuttle-secrets/0.39.0/shuttle_secrets/index.html) +//! - [Shuttle secrets](https://docs.rs/shuttle-secrets/latest/shuttle_secrets/) //! //! Additionally, Config supports: //! diff --git a/src/shuttle_secret_store.rs b/src/shuttle_secret_store.rs index cd3b05a3..55c8b38a 100644 --- a/src/shuttle_secret_store.rs +++ b/src/shuttle_secret_store.rs @@ -4,7 +4,7 @@ use shuttle_secrets::SecretStore; use crate::{ConfigError, Environment, Map, Source, Value}; -/// A source for the [SecretStore](https://docs.rs/shuttle-secrets/0.39.0/shuttle_secrets/struct.SecretStore.html) +/// A source for the [SecretStore](https://docs.rs/shuttle-secrets/latest/shuttle_secrets/struct.SecretStore.html) /// of [shuttle.rs](https://www.shuttle.rs/). It is based on the [Environment] source and offers all /// the features that Environment provides. /// # Example From 9a266acceaca8d5404075d228d7a40eee9a04d96 Mon Sep 17 00:00:00 2001 From: Christian Binzer Date: Sun, 25 Feb 2024 17:57:24 +0100 Subject: [PATCH 6/7] Add shuttle secret store to external-types.toml --- external-types.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/external-types.toml b/external-types.toml index d2802ad2..3da96d5b 100644 --- a/external-types.toml +++ b/external-types.toml @@ -6,5 +6,6 @@ allowed_external_types = [ "serde::de::Error", "serde::ser::Error", "serde::ser::Serialize", + "shuttle_secrets::SecretStore", ] From 37ea377ffe2611169212f54910b3516f2187f277 Mon Sep 17 00:00:00 2001 From: Christian Binzer Date: Sun, 25 Feb 2024 18:00:58 +0100 Subject: [PATCH 7/7] Format with rust fmt --- src/shuttle_secret_store.rs | 2 +- tests/shuttle_secret_store.rs | 45 ++++++++++++++++++++++------------- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/src/shuttle_secret_store.rs b/src/shuttle_secret_store.rs index 55c8b38a..fadf37c1 100644 --- a/src/shuttle_secret_store.rs +++ b/src/shuttle_secret_store.rs @@ -121,4 +121,4 @@ impl Source for ShuttleSecretStore { fn collect(&self) -> Result, ConfigError> { self.environment.collect() } -} \ No newline at end of file +} diff --git a/tests/shuttle_secret_store.rs b/tests/shuttle_secret_store.rs index c98098d7..9ccb33df 100644 --- a/tests/shuttle_secret_store.rs +++ b/tests/shuttle_secret_store.rs @@ -26,29 +26,42 @@ pub struct GitHubSettings { #[cfg(feature = "shuttle")] fn test_read_secrets_from_store() { let secrets = BTreeMap::from([ - ("MY_APP_AUTHENTICATION__TOKEN_SECRET".to_owned(), "my_secret".to_owned().into()), - ("MY_APP_AUTHENTICATION__GITHUB__CLIENT_ID".to_owned(), "my_client_id".to_owned().into()), - ("MY_APP_AUTHENTICATION__GITHUB__CLIENT_SECRET".to_owned(), "my_client_secret".to_owned().into()), + ( + "MY_APP_AUTHENTICATION__TOKEN_SECRET".to_owned(), + "my_secret".to_owned().into(), + ), + ( + "MY_APP_AUTHENTICATION__GITHUB__CLIENT_ID".to_owned(), + "my_client_id".to_owned().into(), + ), + ( + "MY_APP_AUTHENTICATION__GITHUB__CLIENT_SECRET".to_owned(), + "my_client_secret".to_owned().into(), + ), ]); let secret_store = SecretStore::new(secrets); let config = Config::builder() - .add_source(ShuttleSecretStore::new(&secret_store) - .prefix("MY_APP") - .prefix_separator("_") - .separator("__") + .add_source( + ShuttleSecretStore::new(&secret_store) + .prefix("MY_APP") + .prefix_separator("_") + .separator("__"), ) .build() .unwrap() .try_deserialize::() .unwrap(); - assert_eq!(config, MyAppConfiguration { - authentication: AuthenticationSettings { - token_secret: "my_secret".to_string(), - github: GitHubSettings { - client_id: "my_client_id".to_string(), - client_secret: "my_client_secret".to_string(), - }, + assert_eq!( + config, + MyAppConfiguration { + authentication: AuthenticationSettings { + token_secret: "my_secret".to_string(), + github: GitHubSettings { + client_id: "my_client_id".to_string(), + client_secret: "my_client_secret".to_string(), + }, + } } - }) -} \ No newline at end of file + ) +}