johndeniel commited on
Commit
61ff1f0
1 Parent(s): 876c0ae

Upload 10 files

Browse files
Cargo.lock ADDED
@@ -0,0 +1,1517 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 3
4
+
5
+ [[package]]
6
+ name = "addr2line"
7
+ version = "0.22.0"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678"
10
+ dependencies = [
11
+ "gimli",
12
+ ]
13
+
14
+ [[package]]
15
+ name = "adler"
16
+ version = "1.0.2"
17
+ source = "registry+https://github.com/rust-lang/crates.io-index"
18
+ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
19
+
20
+ [[package]]
21
+ name = "android-tzdata"
22
+ version = "0.1.1"
23
+ source = "registry+https://github.com/rust-lang/crates.io-index"
24
+ checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
25
+
26
+ [[package]]
27
+ name = "android_system_properties"
28
+ version = "0.1.5"
29
+ source = "registry+https://github.com/rust-lang/crates.io-index"
30
+ checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
31
+ dependencies = [
32
+ "libc",
33
+ ]
34
+
35
+ [[package]]
36
+ name = "async-trait"
37
+ version = "0.1.80"
38
+ source = "registry+https://github.com/rust-lang/crates.io-index"
39
+ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca"
40
+ dependencies = [
41
+ "proc-macro2",
42
+ "quote",
43
+ "syn",
44
+ ]
45
+
46
+ [[package]]
47
+ name = "autocfg"
48
+ version = "1.3.0"
49
+ source = "registry+https://github.com/rust-lang/crates.io-index"
50
+ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
51
+
52
+ [[package]]
53
+ name = "axum"
54
+ version = "0.6.20"
55
+ source = "registry+https://github.com/rust-lang/crates.io-index"
56
+ checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf"
57
+ dependencies = [
58
+ "async-trait",
59
+ "axum-core",
60
+ "bitflags 1.3.2",
61
+ "bytes",
62
+ "futures-util",
63
+ "headers",
64
+ "http",
65
+ "http-body",
66
+ "hyper",
67
+ "itoa",
68
+ "matchit",
69
+ "memchr",
70
+ "mime",
71
+ "percent-encoding",
72
+ "pin-project-lite",
73
+ "rustversion",
74
+ "serde",
75
+ "serde_json",
76
+ "serde_path_to_error",
77
+ "serde_urlencoded",
78
+ "sync_wrapper",
79
+ "tokio",
80
+ "tower",
81
+ "tower-layer",
82
+ "tower-service",
83
+ ]
84
+
85
+ [[package]]
86
+ name = "axum-core"
87
+ version = "0.3.4"
88
+ source = "registry+https://github.com/rust-lang/crates.io-index"
89
+ checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
90
+ dependencies = [
91
+ "async-trait",
92
+ "bytes",
93
+ "futures-util",
94
+ "http",
95
+ "http-body",
96
+ "mime",
97
+ "rustversion",
98
+ "tower-layer",
99
+ "tower-service",
100
+ ]
101
+
102
+ [[package]]
103
+ name = "backtrace"
104
+ version = "0.3.72"
105
+ source = "registry+https://github.com/rust-lang/crates.io-index"
106
+ checksum = "17c6a35df3749d2e8bb1b7b21a976d82b15548788d2735b9d82f329268f71a11"
107
+ dependencies = [
108
+ "addr2line",
109
+ "cc",
110
+ "cfg-if",
111
+ "libc",
112
+ "miniz_oxide",
113
+ "object",
114
+ "rustc-demangle",
115
+ ]
116
+
117
+ [[package]]
118
+ name = "base64"
119
+ version = "0.21.7"
120
+ source = "registry+https://github.com/rust-lang/crates.io-index"
121
+ checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
122
+
123
+ [[package]]
124
+ name = "bitflags"
125
+ version = "1.3.2"
126
+ source = "registry+https://github.com/rust-lang/crates.io-index"
127
+ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
128
+
129
+ [[package]]
130
+ name = "bitflags"
131
+ version = "2.5.0"
132
+ source = "registry+https://github.com/rust-lang/crates.io-index"
133
+ checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
134
+
135
+ [[package]]
136
+ name = "block-buffer"
137
+ version = "0.10.4"
138
+ source = "registry+https://github.com/rust-lang/crates.io-index"
139
+ checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
140
+ dependencies = [
141
+ "generic-array",
142
+ ]
143
+
144
+ [[package]]
145
+ name = "bumpalo"
146
+ version = "3.16.0"
147
+ source = "registry+https://github.com/rust-lang/crates.io-index"
148
+ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
149
+
150
+ [[package]]
151
+ name = "bytes"
152
+ version = "1.6.0"
153
+ source = "registry+https://github.com/rust-lang/crates.io-index"
154
+ checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9"
155
+
156
+ [[package]]
157
+ name = "cc"
158
+ version = "1.0.99"
159
+ source = "registry+https://github.com/rust-lang/crates.io-index"
160
+ checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695"
161
+
162
+ [[package]]
163
+ name = "cfg-if"
164
+ version = "1.0.0"
165
+ source = "registry+https://github.com/rust-lang/crates.io-index"
166
+ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
167
+
168
+ [[package]]
169
+ name = "chrono"
170
+ version = "0.4.38"
171
+ source = "registry+https://github.com/rust-lang/crates.io-index"
172
+ checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
173
+ dependencies = [
174
+ "android-tzdata",
175
+ "iana-time-zone",
176
+ "js-sys",
177
+ "num-traits",
178
+ "serde",
179
+ "wasm-bindgen",
180
+ "windows-targets 0.52.5",
181
+ ]
182
+
183
+ [[package]]
184
+ name = "core-foundation"
185
+ version = "0.9.4"
186
+ source = "registry+https://github.com/rust-lang/crates.io-index"
187
+ checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
188
+ dependencies = [
189
+ "core-foundation-sys",
190
+ "libc",
191
+ ]
192
+
193
+ [[package]]
194
+ name = "core-foundation-sys"
195
+ version = "0.8.6"
196
+ source = "registry+https://github.com/rust-lang/crates.io-index"
197
+ checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
198
+
199
+ [[package]]
200
+ name = "cpufeatures"
201
+ version = "0.2.12"
202
+ source = "registry+https://github.com/rust-lang/crates.io-index"
203
+ checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
204
+ dependencies = [
205
+ "libc",
206
+ ]
207
+
208
+ [[package]]
209
+ name = "crypto-common"
210
+ version = "0.1.6"
211
+ source = "registry+https://github.com/rust-lang/crates.io-index"
212
+ checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
213
+ dependencies = [
214
+ "generic-array",
215
+ "typenum",
216
+ ]
217
+
218
+ [[package]]
219
+ name = "digest"
220
+ version = "0.10.7"
221
+ source = "registry+https://github.com/rust-lang/crates.io-index"
222
+ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
223
+ dependencies = [
224
+ "block-buffer",
225
+ "crypto-common",
226
+ ]
227
+
228
+ [[package]]
229
+ name = "dotenvy"
230
+ version = "0.15.7"
231
+ source = "registry+https://github.com/rust-lang/crates.io-index"
232
+ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
233
+
234
+ [[package]]
235
+ name = "encoding_rs"
236
+ version = "0.8.34"
237
+ source = "registry+https://github.com/rust-lang/crates.io-index"
238
+ checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59"
239
+ dependencies = [
240
+ "cfg-if",
241
+ ]
242
+
243
+ [[package]]
244
+ name = "equivalent"
245
+ version = "1.0.1"
246
+ source = "registry+https://github.com/rust-lang/crates.io-index"
247
+ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
248
+
249
+ [[package]]
250
+ name = "errno"
251
+ version = "0.3.9"
252
+ source = "registry+https://github.com/rust-lang/crates.io-index"
253
+ checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
254
+ dependencies = [
255
+ "libc",
256
+ "windows-sys 0.52.0",
257
+ ]
258
+
259
+ [[package]]
260
+ name = "fastrand"
261
+ version = "2.1.0"
262
+ source = "registry+https://github.com/rust-lang/crates.io-index"
263
+ checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
264
+
265
+ [[package]]
266
+ name = "fnv"
267
+ version = "1.0.7"
268
+ source = "registry+https://github.com/rust-lang/crates.io-index"
269
+ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
270
+
271
+ [[package]]
272
+ name = "foreign-types"
273
+ version = "0.3.2"
274
+ source = "registry+https://github.com/rust-lang/crates.io-index"
275
+ checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
276
+ dependencies = [
277
+ "foreign-types-shared",
278
+ ]
279
+
280
+ [[package]]
281
+ name = "foreign-types-shared"
282
+ version = "0.1.1"
283
+ source = "registry+https://github.com/rust-lang/crates.io-index"
284
+ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
285
+
286
+ [[package]]
287
+ name = "form_urlencoded"
288
+ version = "1.2.1"
289
+ source = "registry+https://github.com/rust-lang/crates.io-index"
290
+ checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
291
+ dependencies = [
292
+ "percent-encoding",
293
+ ]
294
+
295
+ [[package]]
296
+ name = "futures-channel"
297
+ version = "0.3.30"
298
+ source = "registry+https://github.com/rust-lang/crates.io-index"
299
+ checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
300
+ dependencies = [
301
+ "futures-core",
302
+ ]
303
+
304
+ [[package]]
305
+ name = "futures-core"
306
+ version = "0.3.30"
307
+ source = "registry+https://github.com/rust-lang/crates.io-index"
308
+ checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
309
+
310
+ [[package]]
311
+ name = "futures-sink"
312
+ version = "0.3.30"
313
+ source = "registry+https://github.com/rust-lang/crates.io-index"
314
+ checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
315
+
316
+ [[package]]
317
+ name = "futures-task"
318
+ version = "0.3.30"
319
+ source = "registry+https://github.com/rust-lang/crates.io-index"
320
+ checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
321
+
322
+ [[package]]
323
+ name = "futures-util"
324
+ version = "0.3.30"
325
+ source = "registry+https://github.com/rust-lang/crates.io-index"
326
+ checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
327
+ dependencies = [
328
+ "futures-core",
329
+ "futures-task",
330
+ "pin-project-lite",
331
+ "pin-utils",
332
+ ]
333
+
334
+ [[package]]
335
+ name = "generic-array"
336
+ version = "0.14.7"
337
+ source = "registry+https://github.com/rust-lang/crates.io-index"
338
+ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
339
+ dependencies = [
340
+ "typenum",
341
+ "version_check",
342
+ ]
343
+
344
+ [[package]]
345
+ name = "gimli"
346
+ version = "0.29.0"
347
+ source = "registry+https://github.com/rust-lang/crates.io-index"
348
+ checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd"
349
+
350
+ [[package]]
351
+ name = "h2"
352
+ version = "0.3.26"
353
+ source = "registry+https://github.com/rust-lang/crates.io-index"
354
+ checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8"
355
+ dependencies = [
356
+ "bytes",
357
+ "fnv",
358
+ "futures-core",
359
+ "futures-sink",
360
+ "futures-util",
361
+ "http",
362
+ "indexmap",
363
+ "slab",
364
+ "tokio",
365
+ "tokio-util",
366
+ "tracing",
367
+ ]
368
+
369
+ [[package]]
370
+ name = "hashbrown"
371
+ version = "0.14.5"
372
+ source = "registry+https://github.com/rust-lang/crates.io-index"
373
+ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
374
+
375
+ [[package]]
376
+ name = "headers"
377
+ version = "0.3.9"
378
+ source = "registry+https://github.com/rust-lang/crates.io-index"
379
+ checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270"
380
+ dependencies = [
381
+ "base64",
382
+ "bytes",
383
+ "headers-core",
384
+ "http",
385
+ "httpdate",
386
+ "mime",
387
+ "sha1",
388
+ ]
389
+
390
+ [[package]]
391
+ name = "headers-core"
392
+ version = "0.2.0"
393
+ source = "registry+https://github.com/rust-lang/crates.io-index"
394
+ checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
395
+ dependencies = [
396
+ "http",
397
+ ]
398
+
399
+ [[package]]
400
+ name = "hermit-abi"
401
+ version = "0.3.9"
402
+ source = "registry+https://github.com/rust-lang/crates.io-index"
403
+ checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
404
+
405
+ [[package]]
406
+ name = "http"
407
+ version = "0.2.12"
408
+ source = "registry+https://github.com/rust-lang/crates.io-index"
409
+ checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
410
+ dependencies = [
411
+ "bytes",
412
+ "fnv",
413
+ "itoa",
414
+ ]
415
+
416
+ [[package]]
417
+ name = "http-body"
418
+ version = "0.4.6"
419
+ source = "registry+https://github.com/rust-lang/crates.io-index"
420
+ checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
421
+ dependencies = [
422
+ "bytes",
423
+ "http",
424
+ "pin-project-lite",
425
+ ]
426
+
427
+ [[package]]
428
+ name = "http-range-header"
429
+ version = "0.3.1"
430
+ source = "registry+https://github.com/rust-lang/crates.io-index"
431
+ checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f"
432
+
433
+ [[package]]
434
+ name = "httparse"
435
+ version = "1.8.0"
436
+ source = "registry+https://github.com/rust-lang/crates.io-index"
437
+ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
438
+
439
+ [[package]]
440
+ name = "httpdate"
441
+ version = "1.0.3"
442
+ source = "registry+https://github.com/rust-lang/crates.io-index"
443
+ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
444
+
445
+ [[package]]
446
+ name = "hyper"
447
+ version = "0.14.29"
448
+ source = "registry+https://github.com/rust-lang/crates.io-index"
449
+ checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33"
450
+ dependencies = [
451
+ "bytes",
452
+ "futures-channel",
453
+ "futures-core",
454
+ "futures-util",
455
+ "h2",
456
+ "http",
457
+ "http-body",
458
+ "httparse",
459
+ "httpdate",
460
+ "itoa",
461
+ "pin-project-lite",
462
+ "socket2",
463
+ "tokio",
464
+ "tower-service",
465
+ "tracing",
466
+ "want",
467
+ ]
468
+
469
+ [[package]]
470
+ name = "hyper-tls"
471
+ version = "0.5.0"
472
+ source = "registry+https://github.com/rust-lang/crates.io-index"
473
+ checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
474
+ dependencies = [
475
+ "bytes",
476
+ "hyper",
477
+ "native-tls",
478
+ "tokio",
479
+ "tokio-native-tls",
480
+ ]
481
+
482
+ [[package]]
483
+ name = "iana-time-zone"
484
+ version = "0.1.60"
485
+ source = "registry+https://github.com/rust-lang/crates.io-index"
486
+ checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
487
+ dependencies = [
488
+ "android_system_properties",
489
+ "core-foundation-sys",
490
+ "iana-time-zone-haiku",
491
+ "js-sys",
492
+ "wasm-bindgen",
493
+ "windows-core",
494
+ ]
495
+
496
+ [[package]]
497
+ name = "iana-time-zone-haiku"
498
+ version = "0.1.2"
499
+ source = "registry+https://github.com/rust-lang/crates.io-index"
500
+ checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
501
+ dependencies = [
502
+ "cc",
503
+ ]
504
+
505
+ [[package]]
506
+ name = "idna"
507
+ version = "0.5.0"
508
+ source = "registry+https://github.com/rust-lang/crates.io-index"
509
+ checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
510
+ dependencies = [
511
+ "unicode-bidi",
512
+ "unicode-normalization",
513
+ ]
514
+
515
+ [[package]]
516
+ name = "indexmap"
517
+ version = "2.2.6"
518
+ source = "registry+https://github.com/rust-lang/crates.io-index"
519
+ checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26"
520
+ dependencies = [
521
+ "equivalent",
522
+ "hashbrown",
523
+ ]
524
+
525
+ [[package]]
526
+ name = "ipnet"
527
+ version = "2.9.0"
528
+ source = "registry+https://github.com/rust-lang/crates.io-index"
529
+ checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
530
+
531
+ [[package]]
532
+ name = "itoa"
533
+ version = "1.0.11"
534
+ source = "registry+https://github.com/rust-lang/crates.io-index"
535
+ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
536
+
537
+ [[package]]
538
+ name = "js-sys"
539
+ version = "0.3.69"
540
+ source = "registry+https://github.com/rust-lang/crates.io-index"
541
+ checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d"
542
+ dependencies = [
543
+ "wasm-bindgen",
544
+ ]
545
+
546
+ [[package]]
547
+ name = "libc"
548
+ version = "0.2.155"
549
+ source = "registry+https://github.com/rust-lang/crates.io-index"
550
+ checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
551
+
552
+ [[package]]
553
+ name = "linux-raw-sys"
554
+ version = "0.4.14"
555
+ source = "registry+https://github.com/rust-lang/crates.io-index"
556
+ checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
557
+
558
+ [[package]]
559
+ name = "lock_api"
560
+ version = "0.4.12"
561
+ source = "registry+https://github.com/rust-lang/crates.io-index"
562
+ checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
563
+ dependencies = [
564
+ "autocfg",
565
+ "scopeguard",
566
+ ]
567
+
568
+ [[package]]
569
+ name = "log"
570
+ version = "0.4.21"
571
+ source = "registry+https://github.com/rust-lang/crates.io-index"
572
+ checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
573
+
574
+ [[package]]
575
+ name = "matchit"
576
+ version = "0.7.3"
577
+ source = "registry+https://github.com/rust-lang/crates.io-index"
578
+ checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
579
+
580
+ [[package]]
581
+ name = "memchr"
582
+ version = "2.7.2"
583
+ source = "registry+https://github.com/rust-lang/crates.io-index"
584
+ checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d"
585
+
586
+ [[package]]
587
+ name = "mime"
588
+ version = "0.3.17"
589
+ source = "registry+https://github.com/rust-lang/crates.io-index"
590
+ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
591
+
592
+ [[package]]
593
+ name = "miniz_oxide"
594
+ version = "0.7.3"
595
+ source = "registry+https://github.com/rust-lang/crates.io-index"
596
+ checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae"
597
+ dependencies = [
598
+ "adler",
599
+ ]
600
+
601
+ [[package]]
602
+ name = "mio"
603
+ version = "0.8.11"
604
+ source = "registry+https://github.com/rust-lang/crates.io-index"
605
+ checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"
606
+ dependencies = [
607
+ "libc",
608
+ "wasi",
609
+ "windows-sys 0.48.0",
610
+ ]
611
+
612
+ [[package]]
613
+ name = "native-tls"
614
+ version = "0.2.12"
615
+ source = "registry+https://github.com/rust-lang/crates.io-index"
616
+ checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466"
617
+ dependencies = [
618
+ "libc",
619
+ "log",
620
+ "openssl",
621
+ "openssl-probe",
622
+ "openssl-sys",
623
+ "schannel",
624
+ "security-framework",
625
+ "security-framework-sys",
626
+ "tempfile",
627
+ ]
628
+
629
+ [[package]]
630
+ name = "num-traits"
631
+ version = "0.2.19"
632
+ source = "registry+https://github.com/rust-lang/crates.io-index"
633
+ checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
634
+ dependencies = [
635
+ "autocfg",
636
+ ]
637
+
638
+ [[package]]
639
+ name = "num_cpus"
640
+ version = "1.16.0"
641
+ source = "registry+https://github.com/rust-lang/crates.io-index"
642
+ checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
643
+ dependencies = [
644
+ "hermit-abi",
645
+ "libc",
646
+ ]
647
+
648
+ [[package]]
649
+ name = "object"
650
+ version = "0.35.0"
651
+ source = "registry+https://github.com/rust-lang/crates.io-index"
652
+ checksum = "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e"
653
+ dependencies = [
654
+ "memchr",
655
+ ]
656
+
657
+ [[package]]
658
+ name = "once_cell"
659
+ version = "1.19.0"
660
+ source = "registry+https://github.com/rust-lang/crates.io-index"
661
+ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
662
+
663
+ [[package]]
664
+ name = "openssl"
665
+ version = "0.10.64"
666
+ source = "registry+https://github.com/rust-lang/crates.io-index"
667
+ checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f"
668
+ dependencies = [
669
+ "bitflags 2.5.0",
670
+ "cfg-if",
671
+ "foreign-types",
672
+ "libc",
673
+ "once_cell",
674
+ "openssl-macros",
675
+ "openssl-sys",
676
+ ]
677
+
678
+ [[package]]
679
+ name = "openssl-macros"
680
+ version = "0.1.1"
681
+ source = "registry+https://github.com/rust-lang/crates.io-index"
682
+ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
683
+ dependencies = [
684
+ "proc-macro2",
685
+ "quote",
686
+ "syn",
687
+ ]
688
+
689
+ [[package]]
690
+ name = "openssl-probe"
691
+ version = "0.1.5"
692
+ source = "registry+https://github.com/rust-lang/crates.io-index"
693
+ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
694
+
695
+ [[package]]
696
+ name = "openssl-sys"
697
+ version = "0.9.102"
698
+ source = "registry+https://github.com/rust-lang/crates.io-index"
699
+ checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2"
700
+ dependencies = [
701
+ "cc",
702
+ "libc",
703
+ "pkg-config",
704
+ "vcpkg",
705
+ ]
706
+
707
+ [[package]]
708
+ name = "parking_lot"
709
+ version = "0.12.3"
710
+ source = "registry+https://github.com/rust-lang/crates.io-index"
711
+ checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
712
+ dependencies = [
713
+ "lock_api",
714
+ "parking_lot_core",
715
+ ]
716
+
717
+ [[package]]
718
+ name = "parking_lot_core"
719
+ version = "0.9.10"
720
+ source = "registry+https://github.com/rust-lang/crates.io-index"
721
+ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
722
+ dependencies = [
723
+ "cfg-if",
724
+ "libc",
725
+ "redox_syscall",
726
+ "smallvec",
727
+ "windows-targets 0.52.5",
728
+ ]
729
+
730
+ [[package]]
731
+ name = "percent-encoding"
732
+ version = "2.3.1"
733
+ source = "registry+https://github.com/rust-lang/crates.io-index"
734
+ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
735
+
736
+ [[package]]
737
+ name = "pin-project"
738
+ version = "1.1.5"
739
+ source = "registry+https://github.com/rust-lang/crates.io-index"
740
+ checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3"
741
+ dependencies = [
742
+ "pin-project-internal",
743
+ ]
744
+
745
+ [[package]]
746
+ name = "pin-project-internal"
747
+ version = "1.1.5"
748
+ source = "registry+https://github.com/rust-lang/crates.io-index"
749
+ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
750
+ dependencies = [
751
+ "proc-macro2",
752
+ "quote",
753
+ "syn",
754
+ ]
755
+
756
+ [[package]]
757
+ name = "pin-project-lite"
758
+ version = "0.2.14"
759
+ source = "registry+https://github.com/rust-lang/crates.io-index"
760
+ checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
761
+
762
+ [[package]]
763
+ name = "pin-utils"
764
+ version = "0.1.0"
765
+ source = "registry+https://github.com/rust-lang/crates.io-index"
766
+ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
767
+
768
+ [[package]]
769
+ name = "pkg-config"
770
+ version = "0.3.30"
771
+ source = "registry+https://github.com/rust-lang/crates.io-index"
772
+ checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
773
+
774
+ [[package]]
775
+ name = "proc-macro2"
776
+ version = "1.0.85"
777
+ source = "registry+https://github.com/rust-lang/crates.io-index"
778
+ checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23"
779
+ dependencies = [
780
+ "unicode-ident",
781
+ ]
782
+
783
+ [[package]]
784
+ name = "quote"
785
+ version = "1.0.36"
786
+ source = "registry+https://github.com/rust-lang/crates.io-index"
787
+ checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
788
+ dependencies = [
789
+ "proc-macro2",
790
+ ]
791
+
792
+ [[package]]
793
+ name = "redox_syscall"
794
+ version = "0.5.1"
795
+ source = "registry+https://github.com/rust-lang/crates.io-index"
796
+ checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e"
797
+ dependencies = [
798
+ "bitflags 2.5.0",
799
+ ]
800
+
801
+ [[package]]
802
+ name = "reqwest"
803
+ version = "0.11.27"
804
+ source = "registry+https://github.com/rust-lang/crates.io-index"
805
+ checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62"
806
+ dependencies = [
807
+ "base64",
808
+ "bytes",
809
+ "encoding_rs",
810
+ "futures-core",
811
+ "futures-util",
812
+ "h2",
813
+ "http",
814
+ "http-body",
815
+ "hyper",
816
+ "hyper-tls",
817
+ "ipnet",
818
+ "js-sys",
819
+ "log",
820
+ "mime",
821
+ "native-tls",
822
+ "once_cell",
823
+ "percent-encoding",
824
+ "pin-project-lite",
825
+ "rustls-pemfile",
826
+ "serde",
827
+ "serde_json",
828
+ "serde_urlencoded",
829
+ "sync_wrapper",
830
+ "system-configuration",
831
+ "tokio",
832
+ "tokio-native-tls",
833
+ "tower-service",
834
+ "url",
835
+ "wasm-bindgen",
836
+ "wasm-bindgen-futures",
837
+ "web-sys",
838
+ "winreg",
839
+ ]
840
+
841
+ [[package]]
842
+ name = "rustc-demangle"
843
+ version = "0.1.24"
844
+ source = "registry+https://github.com/rust-lang/crates.io-index"
845
+ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
846
+
847
+ [[package]]
848
+ name = "rustix"
849
+ version = "0.38.34"
850
+ source = "registry+https://github.com/rust-lang/crates.io-index"
851
+ checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
852
+ dependencies = [
853
+ "bitflags 2.5.0",
854
+ "errno",
855
+ "libc",
856
+ "linux-raw-sys",
857
+ "windows-sys 0.52.0",
858
+ ]
859
+
860
+ [[package]]
861
+ name = "rustls-pemfile"
862
+ version = "1.0.4"
863
+ source = "registry+https://github.com/rust-lang/crates.io-index"
864
+ checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
865
+ dependencies = [
866
+ "base64",
867
+ ]
868
+
869
+ [[package]]
870
+ name = "rustversion"
871
+ version = "1.0.17"
872
+ source = "registry+https://github.com/rust-lang/crates.io-index"
873
+ checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6"
874
+
875
+ [[package]]
876
+ name = "ryu"
877
+ version = "1.0.18"
878
+ source = "registry+https://github.com/rust-lang/crates.io-index"
879
+ checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
880
+
881
+ [[package]]
882
+ name = "schannel"
883
+ version = "0.1.23"
884
+ source = "registry+https://github.com/rust-lang/crates.io-index"
885
+ checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534"
886
+ dependencies = [
887
+ "windows-sys 0.52.0",
888
+ ]
889
+
890
+ [[package]]
891
+ name = "scopeguard"
892
+ version = "1.2.0"
893
+ source = "registry+https://github.com/rust-lang/crates.io-index"
894
+ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
895
+
896
+ [[package]]
897
+ name = "security-framework"
898
+ version = "2.11.0"
899
+ source = "registry+https://github.com/rust-lang/crates.io-index"
900
+ checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0"
901
+ dependencies = [
902
+ "bitflags 2.5.0",
903
+ "core-foundation",
904
+ "core-foundation-sys",
905
+ "libc",
906
+ "security-framework-sys",
907
+ ]
908
+
909
+ [[package]]
910
+ name = "security-framework-sys"
911
+ version = "2.11.0"
912
+ source = "registry+https://github.com/rust-lang/crates.io-index"
913
+ checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7"
914
+ dependencies = [
915
+ "core-foundation-sys",
916
+ "libc",
917
+ ]
918
+
919
+ [[package]]
920
+ name = "serde"
921
+ version = "1.0.203"
922
+ source = "registry+https://github.com/rust-lang/crates.io-index"
923
+ checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094"
924
+ dependencies = [
925
+ "serde_derive",
926
+ ]
927
+
928
+ [[package]]
929
+ name = "serde_derive"
930
+ version = "1.0.203"
931
+ source = "registry+https://github.com/rust-lang/crates.io-index"
932
+ checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba"
933
+ dependencies = [
934
+ "proc-macro2",
935
+ "quote",
936
+ "syn",
937
+ ]
938
+
939
+ [[package]]
940
+ name = "serde_json"
941
+ version = "1.0.117"
942
+ source = "registry+https://github.com/rust-lang/crates.io-index"
943
+ checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3"
944
+ dependencies = [
945
+ "itoa",
946
+ "ryu",
947
+ "serde",
948
+ ]
949
+
950
+ [[package]]
951
+ name = "serde_path_to_error"
952
+ version = "0.1.16"
953
+ source = "registry+https://github.com/rust-lang/crates.io-index"
954
+ checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6"
955
+ dependencies = [
956
+ "itoa",
957
+ "serde",
958
+ ]
959
+
960
+ [[package]]
961
+ name = "serde_urlencoded"
962
+ version = "0.7.1"
963
+ source = "registry+https://github.com/rust-lang/crates.io-index"
964
+ checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
965
+ dependencies = [
966
+ "form_urlencoded",
967
+ "itoa",
968
+ "ryu",
969
+ "serde",
970
+ ]
971
+
972
+ [[package]]
973
+ name = "sha1"
974
+ version = "0.10.6"
975
+ source = "registry+https://github.com/rust-lang/crates.io-index"
976
+ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
977
+ dependencies = [
978
+ "cfg-if",
979
+ "cpufeatures",
980
+ "digest",
981
+ ]
982
+
983
+ [[package]]
984
+ name = "signal-hook-registry"
985
+ version = "1.4.2"
986
+ source = "registry+https://github.com/rust-lang/crates.io-index"
987
+ checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
988
+ dependencies = [
989
+ "libc",
990
+ ]
991
+
992
+ [[package]]
993
+ name = "slab"
994
+ version = "0.4.9"
995
+ source = "registry+https://github.com/rust-lang/crates.io-index"
996
+ checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
997
+ dependencies = [
998
+ "autocfg",
999
+ ]
1000
+
1001
+ [[package]]
1002
+ name = "smallvec"
1003
+ version = "1.13.2"
1004
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1005
+ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
1006
+
1007
+ [[package]]
1008
+ name = "socket2"
1009
+ version = "0.5.7"
1010
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1011
+ checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c"
1012
+ dependencies = [
1013
+ "libc",
1014
+ "windows-sys 0.52.0",
1015
+ ]
1016
+
1017
+ [[package]]
1018
+ name = "spotify"
1019
+ version = "0.1.0"
1020
+ dependencies = [
1021
+ "axum",
1022
+ "chrono",
1023
+ "dotenvy",
1024
+ "reqwest",
1025
+ "serde",
1026
+ "tokio",
1027
+ "tower-http",
1028
+ ]
1029
+
1030
+ [[package]]
1031
+ name = "syn"
1032
+ version = "2.0.66"
1033
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1034
+ checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5"
1035
+ dependencies = [
1036
+ "proc-macro2",
1037
+ "quote",
1038
+ "unicode-ident",
1039
+ ]
1040
+
1041
+ [[package]]
1042
+ name = "sync_wrapper"
1043
+ version = "0.1.2"
1044
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1045
+ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
1046
+
1047
+ [[package]]
1048
+ name = "system-configuration"
1049
+ version = "0.5.1"
1050
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1051
+ checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
1052
+ dependencies = [
1053
+ "bitflags 1.3.2",
1054
+ "core-foundation",
1055
+ "system-configuration-sys",
1056
+ ]
1057
+
1058
+ [[package]]
1059
+ name = "system-configuration-sys"
1060
+ version = "0.5.0"
1061
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1062
+ checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
1063
+ dependencies = [
1064
+ "core-foundation-sys",
1065
+ "libc",
1066
+ ]
1067
+
1068
+ [[package]]
1069
+ name = "tempfile"
1070
+ version = "3.10.1"
1071
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1072
+ checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1"
1073
+ dependencies = [
1074
+ "cfg-if",
1075
+ "fastrand",
1076
+ "rustix",
1077
+ "windows-sys 0.52.0",
1078
+ ]
1079
+
1080
+ [[package]]
1081
+ name = "tinyvec"
1082
+ version = "1.6.0"
1083
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1084
+ checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
1085
+ dependencies = [
1086
+ "tinyvec_macros",
1087
+ ]
1088
+
1089
+ [[package]]
1090
+ name = "tinyvec_macros"
1091
+ version = "0.1.1"
1092
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1093
+ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
1094
+
1095
+ [[package]]
1096
+ name = "tokio"
1097
+ version = "1.38.0"
1098
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1099
+ checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a"
1100
+ dependencies = [
1101
+ "backtrace",
1102
+ "bytes",
1103
+ "libc",
1104
+ "mio",
1105
+ "num_cpus",
1106
+ "parking_lot",
1107
+ "pin-project-lite",
1108
+ "signal-hook-registry",
1109
+ "socket2",
1110
+ "tokio-macros",
1111
+ "windows-sys 0.48.0",
1112
+ ]
1113
+
1114
+ [[package]]
1115
+ name = "tokio-macros"
1116
+ version = "2.3.0"
1117
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1118
+ checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a"
1119
+ dependencies = [
1120
+ "proc-macro2",
1121
+ "quote",
1122
+ "syn",
1123
+ ]
1124
+
1125
+ [[package]]
1126
+ name = "tokio-native-tls"
1127
+ version = "0.3.1"
1128
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1129
+ checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
1130
+ dependencies = [
1131
+ "native-tls",
1132
+ "tokio",
1133
+ ]
1134
+
1135
+ [[package]]
1136
+ name = "tokio-util"
1137
+ version = "0.7.11"
1138
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1139
+ checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1"
1140
+ dependencies = [
1141
+ "bytes",
1142
+ "futures-core",
1143
+ "futures-sink",
1144
+ "pin-project-lite",
1145
+ "tokio",
1146
+ ]
1147
+
1148
+ [[package]]
1149
+ name = "tower"
1150
+ version = "0.4.13"
1151
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1152
+ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
1153
+ dependencies = [
1154
+ "futures-core",
1155
+ "futures-util",
1156
+ "pin-project",
1157
+ "pin-project-lite",
1158
+ "tokio",
1159
+ "tower-layer",
1160
+ "tower-service",
1161
+ "tracing",
1162
+ ]
1163
+
1164
+ [[package]]
1165
+ name = "tower-http"
1166
+ version = "0.4.4"
1167
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1168
+ checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140"
1169
+ dependencies = [
1170
+ "bitflags 2.5.0",
1171
+ "bytes",
1172
+ "futures-core",
1173
+ "futures-util",
1174
+ "http",
1175
+ "http-body",
1176
+ "http-range-header",
1177
+ "pin-project-lite",
1178
+ "tower-layer",
1179
+ "tower-service",
1180
+ ]
1181
+
1182
+ [[package]]
1183
+ name = "tower-layer"
1184
+ version = "0.3.2"
1185
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1186
+ checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
1187
+
1188
+ [[package]]
1189
+ name = "tower-service"
1190
+ version = "0.3.2"
1191
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1192
+ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
1193
+
1194
+ [[package]]
1195
+ name = "tracing"
1196
+ version = "0.1.40"
1197
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1198
+ checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
1199
+ dependencies = [
1200
+ "log",
1201
+ "pin-project-lite",
1202
+ "tracing-core",
1203
+ ]
1204
+
1205
+ [[package]]
1206
+ name = "tracing-core"
1207
+ version = "0.1.32"
1208
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1209
+ checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
1210
+ dependencies = [
1211
+ "once_cell",
1212
+ ]
1213
+
1214
+ [[package]]
1215
+ name = "try-lock"
1216
+ version = "0.2.5"
1217
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1218
+ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
1219
+
1220
+ [[package]]
1221
+ name = "typenum"
1222
+ version = "1.17.0"
1223
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1224
+ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
1225
+
1226
+ [[package]]
1227
+ name = "unicode-bidi"
1228
+ version = "0.3.15"
1229
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1230
+ checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
1231
+
1232
+ [[package]]
1233
+ name = "unicode-ident"
1234
+ version = "1.0.12"
1235
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1236
+ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
1237
+
1238
+ [[package]]
1239
+ name = "unicode-normalization"
1240
+ version = "0.1.23"
1241
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1242
+ checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5"
1243
+ dependencies = [
1244
+ "tinyvec",
1245
+ ]
1246
+
1247
+ [[package]]
1248
+ name = "url"
1249
+ version = "2.5.0"
1250
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1251
+ checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
1252
+ dependencies = [
1253
+ "form_urlencoded",
1254
+ "idna",
1255
+ "percent-encoding",
1256
+ ]
1257
+
1258
+ [[package]]
1259
+ name = "vcpkg"
1260
+ version = "0.2.15"
1261
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1262
+ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
1263
+
1264
+ [[package]]
1265
+ name = "version_check"
1266
+ version = "0.9.4"
1267
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1268
+ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
1269
+
1270
+ [[package]]
1271
+ name = "want"
1272
+ version = "0.3.1"
1273
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1274
+ checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
1275
+ dependencies = [
1276
+ "try-lock",
1277
+ ]
1278
+
1279
+ [[package]]
1280
+ name = "wasi"
1281
+ version = "0.11.0+wasi-snapshot-preview1"
1282
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1283
+ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
1284
+
1285
+ [[package]]
1286
+ name = "wasm-bindgen"
1287
+ version = "0.2.92"
1288
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1289
+ checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
1290
+ dependencies = [
1291
+ "cfg-if",
1292
+ "wasm-bindgen-macro",
1293
+ ]
1294
+
1295
+ [[package]]
1296
+ name = "wasm-bindgen-backend"
1297
+ version = "0.2.92"
1298
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1299
+ checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
1300
+ dependencies = [
1301
+ "bumpalo",
1302
+ "log",
1303
+ "once_cell",
1304
+ "proc-macro2",
1305
+ "quote",
1306
+ "syn",
1307
+ "wasm-bindgen-shared",
1308
+ ]
1309
+
1310
+ [[package]]
1311
+ name = "wasm-bindgen-futures"
1312
+ version = "0.4.42"
1313
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1314
+ checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0"
1315
+ dependencies = [
1316
+ "cfg-if",
1317
+ "js-sys",
1318
+ "wasm-bindgen",
1319
+ "web-sys",
1320
+ ]
1321
+
1322
+ [[package]]
1323
+ name = "wasm-bindgen-macro"
1324
+ version = "0.2.92"
1325
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1326
+ checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
1327
+ dependencies = [
1328
+ "quote",
1329
+ "wasm-bindgen-macro-support",
1330
+ ]
1331
+
1332
+ [[package]]
1333
+ name = "wasm-bindgen-macro-support"
1334
+ version = "0.2.92"
1335
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1336
+ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
1337
+ dependencies = [
1338
+ "proc-macro2",
1339
+ "quote",
1340
+ "syn",
1341
+ "wasm-bindgen-backend",
1342
+ "wasm-bindgen-shared",
1343
+ ]
1344
+
1345
+ [[package]]
1346
+ name = "wasm-bindgen-shared"
1347
+ version = "0.2.92"
1348
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1349
+ checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
1350
+
1351
+ [[package]]
1352
+ name = "web-sys"
1353
+ version = "0.3.69"
1354
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1355
+ checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef"
1356
+ dependencies = [
1357
+ "js-sys",
1358
+ "wasm-bindgen",
1359
+ ]
1360
+
1361
+ [[package]]
1362
+ name = "windows-core"
1363
+ version = "0.52.0"
1364
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1365
+ checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
1366
+ dependencies = [
1367
+ "windows-targets 0.52.5",
1368
+ ]
1369
+
1370
+ [[package]]
1371
+ name = "windows-sys"
1372
+ version = "0.48.0"
1373
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1374
+ checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
1375
+ dependencies = [
1376
+ "windows-targets 0.48.5",
1377
+ ]
1378
+
1379
+ [[package]]
1380
+ name = "windows-sys"
1381
+ version = "0.52.0"
1382
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1383
+ checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
1384
+ dependencies = [
1385
+ "windows-targets 0.52.5",
1386
+ ]
1387
+
1388
+ [[package]]
1389
+ name = "windows-targets"
1390
+ version = "0.48.5"
1391
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1392
+ checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
1393
+ dependencies = [
1394
+ "windows_aarch64_gnullvm 0.48.5",
1395
+ "windows_aarch64_msvc 0.48.5",
1396
+ "windows_i686_gnu 0.48.5",
1397
+ "windows_i686_msvc 0.48.5",
1398
+ "windows_x86_64_gnu 0.48.5",
1399
+ "windows_x86_64_gnullvm 0.48.5",
1400
+ "windows_x86_64_msvc 0.48.5",
1401
+ ]
1402
+
1403
+ [[package]]
1404
+ name = "windows-targets"
1405
+ version = "0.52.5"
1406
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1407
+ checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
1408
+ dependencies = [
1409
+ "windows_aarch64_gnullvm 0.52.5",
1410
+ "windows_aarch64_msvc 0.52.5",
1411
+ "windows_i686_gnu 0.52.5",
1412
+ "windows_i686_gnullvm",
1413
+ "windows_i686_msvc 0.52.5",
1414
+ "windows_x86_64_gnu 0.52.5",
1415
+ "windows_x86_64_gnullvm 0.52.5",
1416
+ "windows_x86_64_msvc 0.52.5",
1417
+ ]
1418
+
1419
+ [[package]]
1420
+ name = "windows_aarch64_gnullvm"
1421
+ version = "0.48.5"
1422
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1423
+ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
1424
+
1425
+ [[package]]
1426
+ name = "windows_aarch64_gnullvm"
1427
+ version = "0.52.5"
1428
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1429
+ checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
1430
+
1431
+ [[package]]
1432
+ name = "windows_aarch64_msvc"
1433
+ version = "0.48.5"
1434
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1435
+ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
1436
+
1437
+ [[package]]
1438
+ name = "windows_aarch64_msvc"
1439
+ version = "0.52.5"
1440
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1441
+ checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
1442
+
1443
+ [[package]]
1444
+ name = "windows_i686_gnu"
1445
+ version = "0.48.5"
1446
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1447
+ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
1448
+
1449
+ [[package]]
1450
+ name = "windows_i686_gnu"
1451
+ version = "0.52.5"
1452
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1453
+ checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
1454
+
1455
+ [[package]]
1456
+ name = "windows_i686_gnullvm"
1457
+ version = "0.52.5"
1458
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1459
+ checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
1460
+
1461
+ [[package]]
1462
+ name = "windows_i686_msvc"
1463
+ version = "0.48.5"
1464
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1465
+ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
1466
+
1467
+ [[package]]
1468
+ name = "windows_i686_msvc"
1469
+ version = "0.52.5"
1470
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1471
+ checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
1472
+
1473
+ [[package]]
1474
+ name = "windows_x86_64_gnu"
1475
+ version = "0.48.5"
1476
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1477
+ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
1478
+
1479
+ [[package]]
1480
+ name = "windows_x86_64_gnu"
1481
+ version = "0.52.5"
1482
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1483
+ checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
1484
+
1485
+ [[package]]
1486
+ name = "windows_x86_64_gnullvm"
1487
+ version = "0.48.5"
1488
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1489
+ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
1490
+
1491
+ [[package]]
1492
+ name = "windows_x86_64_gnullvm"
1493
+ version = "0.52.5"
1494
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1495
+ checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
1496
+
1497
+ [[package]]
1498
+ name = "windows_x86_64_msvc"
1499
+ version = "0.48.5"
1500
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1501
+ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
1502
+
1503
+ [[package]]
1504
+ name = "windows_x86_64_msvc"
1505
+ version = "0.52.5"
1506
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1507
+ checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
1508
+
1509
+ [[package]]
1510
+ name = "winreg"
1511
+ version = "0.50.0"
1512
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1513
+ checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
1514
+ dependencies = [
1515
+ "cfg-if",
1516
+ "windows-sys 0.48.0",
1517
+ ]
Cargo.toml ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [package]
2
+ name = "spotify"
3
+ version = "0.1.0"
4
+ edition = "2021"
5
+
6
+ [dependencies]
7
+ axum = { version = "0.6.18", features = ["headers"] }
8
+ chrono = { version = "0.4.26", features = ["serde"] }
9
+ dotenvy = "0.15.7"
10
+ serde = { version = "1.0.164", features = ["derive"] }
11
+ reqwest = { version = "0.11", features = ["json"] }
12
+ tokio = { version = "1.28.2", features = ["full", "macros", "rt-multi-thread"] }
13
+ tower-http = { version = "0.4.1", features = ["cors"] }
Dockerfile ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Use the official Rust image as the base image
2
+ FROM rust:latest AS builder
3
+
4
+ # Create a new empty shell project
5
+ RUN USER=root cargo new --bin spotify
6
+ WORKDIR /spotify
7
+
8
+ # Copy the Cargo.toml and Cargo.lock files
9
+ COPY Cargo.toml Cargo.lock ./
10
+
11
+ # Copy the source code
12
+ COPY src ./src
13
+
14
+ # Build the application in release mode
15
+ RUN cargo build --release
16
+
17
+ # Use the official Debian image as the base image for the runtime
18
+ FROM debian:buster-slim
19
+
20
+ # Copy the compiled binary from the builder stage
21
+ COPY --from=builder /spotify/target/release/spotify /usr/local/bin/spotify
22
+
23
+ # Expose port 7860
24
+ EXPOSE 7860
25
+
26
+ # Run the application
27
+ CMD ["spotify"]
src/lib.rs ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ mod router;
2
+ mod spotify;
3
+
4
+ pub async fn run() {
5
+ // Create a new `axum::Router` instance by calling the `app` function from the `router::routes` module
6
+ let app: axum::Router = router::routes::app();
7
+
8
+ // Bind the server to the address "0.0.0.0:7860" and serve the `app` using `axum::Server`
9
+ axum::Server::bind(&"0.0.0.0:7860".parse().unwrap())
10
+ .serve(app.into_make_service())
11
+ .await
12
+ .unwrap();
13
+ }
src/main.rs ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ use spotify::run;
2
+
3
+ #[tokio::main]
4
+ async fn main() {
5
+ run().await;
6
+ }
src/router/mod.rs ADDED
@@ -0,0 +1 @@
 
 
1
+ pub mod routes;
src/router/routes.rs ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ use axum::{routing::get, Router};
2
+ use axum::response::{Html, IntoResponse};
3
+ use crate::spotify::playlist;
4
+ use std::fs;
5
+
6
+ pub fn app() -> Router {
7
+ Router::new()
8
+ .route("/", get(serve_html))
9
+ .route("/playlist", get(playlist::get_playlist_json))
10
+ }
11
+
12
+ async fn serve_html() -> impl IntoResponse {
13
+ let html_content = fs::read_to_string("src/static/index.html").unwrap();
14
+ Html(html_content)
15
+ }
src/spotify/mod.rs ADDED
@@ -0,0 +1 @@
 
 
1
+ pub mod playlist;
src/spotify/playlist.rs ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ use axum::response::{IntoResponse, Json};
2
+ use serde::{Deserialize, Serialize};
3
+ use dotenvy::dotenv;
4
+
5
+ #[derive(Serialize, Deserialize)]
6
+ struct Playlist {
7
+ name: String,
8
+ tracks: Tracks,
9
+ }
10
+
11
+ #[derive(Serialize, Deserialize)]
12
+ struct Tracks {
13
+ items: Vec<Item>,
14
+ }
15
+
16
+ #[derive(Serialize, Deserialize)]
17
+ struct Item {
18
+ track: Track,
19
+ }
20
+
21
+ #[derive(Serialize, Deserialize)]
22
+ struct Track {
23
+ name: String,
24
+ artists: Vec<Artist>,
25
+ album: Album,
26
+ duration_ms: u64,
27
+ popularity: u8,
28
+ external_urls: ExternalUrls,
29
+ }
30
+
31
+ #[derive(Serialize, Deserialize)]
32
+ struct Artist {
33
+ name: String,
34
+ }
35
+
36
+ #[derive(Serialize, Deserialize)]
37
+ struct Album {
38
+ name: String,
39
+ images: Vec<Image>,
40
+ release_date: String,
41
+ }
42
+
43
+ #[derive(Serialize, Deserialize)]
44
+ struct Image {
45
+ url: String,
46
+ }
47
+
48
+ #[derive(Serialize, Deserialize)]
49
+ struct ExternalUrls {
50
+ spotify: String,
51
+ }
52
+
53
+ #[derive(Serialize, Deserialize)]
54
+ struct TokenResponse {
55
+ access_token: String,
56
+ token_type: String,
57
+ expires_in: u64,
58
+ }
59
+
60
+ /// Retrieves a Spotify access token using client credentials.
61
+ async fn get_spotify_token() -> String {
62
+ dotenv().ok();
63
+ let client_id = std::env::var("SPOTIFY_CLIENT_ID").expect("SPOTIFY_CLIENT_ID not set");
64
+ let client_secret = std::env::var("SPOTIFY_CLIENT_SECRET").expect("SPOTIFY_CLIENT_SECRET not set");
65
+
66
+ let client = reqwest::Client::new();
67
+
68
+ let params = [
69
+ ("grant_type", "client_credentials"),
70
+ ("client_id", &client_id),
71
+ ("client_secret", &client_secret),
72
+ ];
73
+
74
+ let response = client
75
+ .post("https://accounts.spotify.com/api/token")
76
+ .form(&params)
77
+ .send()
78
+ .await
79
+ .unwrap()
80
+ .json::<TokenResponse>()
81
+ .await
82
+ .unwrap();
83
+
84
+ response.access_token
85
+ }
86
+
87
+ /// Retrieves a playlist from Spotify using a provided playlist ID.
88
+ async fn get_playlist() -> Playlist {
89
+ let token = get_spotify_token().await;
90
+ let playlist_id = std::env::var("SPOTIFY_PLAYLIST_ID").expect("SPOTIFY_PLAYLIST_ID not set");
91
+
92
+ let client = reqwest::Client::new();
93
+ let url = format!("https://api.spotify.com/v1/playlists/{}", playlist_id);
94
+
95
+ let response = client
96
+ .get(&url)
97
+ .bearer_auth(token)
98
+ .send()
99
+ .await
100
+ .unwrap()
101
+ .json::<Playlist>()
102
+ .await
103
+ .unwrap();
104
+
105
+ response
106
+ }
107
+
108
+ /// Retrieves a playlist and returns it as JSON.
109
+ pub async fn get_playlist_json() -> impl IntoResponse {
110
+ let playlist = get_playlist().await;
111
+ Json(playlist)
112
+ }
src/static/index.html ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Spotify Playlist</title>
7
+ <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
8
+ </head>
9
+ <body class="bg-gray-900 text-white">
10
+ <header class="bg-black p-6">
11
+ <h1 class="text-3xl font-bold">Spotify API Demo</h1>
12
+ </header>
13
+ <main class="p-6">
14
+ <ul id="playlist" class="space-y-6"></ul>
15
+ </main>
16
+
17
+ <script>
18
+ async function fetchPlaylist() {
19
+ try {
20
+ const response = await fetch('/playlist');
21
+ const { tracks: { items } } = await response.json();
22
+ const playlistElement = document.getElementById('playlist');
23
+
24
+ items.forEach(({ track }) => {
25
+ const listItem = document.createElement('li');
26
+ listItem.className = 'flex items-start space-x-4 p-4 bg-gray-800 rounded-lg hover:bg-gray-700 transition';
27
+
28
+ listItem.innerHTML = `
29
+ <img src="${track.album.images[0].url}" alt="${track.name} cover" class="w-48 h-48 object-cover rounded-md">
30
+ <div class="flex flex-col space-y-2">
31
+ <h2 class="text-xl font-semibold">${track.name}</h2>
32
+ <p class="text-gray-400">Artists: ${track.artists.map(artist => artist.name).join(', ')}</p>
33
+ <p class="text-gray-400">Album: ${track.album.name}</p>
34
+ <p class="text-gray-400">Release Date: ${track.album.release_date}</p>
35
+ <p class="text-gray-400">Duration: ${Math.floor(track.duration_ms / 60000)}:${((track.duration_ms % 60000) / 1000).toFixed(0).padStart(2, '0')} minutes</p>
36
+ <p class="text-gray-400">Popularity: ${track.popularity}</p>
37
+ <a href="${track.external_urls.spotify}" target="_blank" class="text-green-500 hover:underline">Listen on Spotify</a>
38
+ <a href="https://open.spotify.com/playlist/4kTgs1z0nssQlYk3Q3xecY?si=cktIWgT6SMiEzF5qZfQSYw&pi=7GCDGY_zRmKUp&nd=1&dlsi=9394824faa9043fe" target="_blank" class="text-green-500 hover:underline">View Playlist</a>
39
+ </div>
40
+ `;
41
+
42
+ playlistElement.appendChild(listItem);
43
+ });
44
+ } catch (error) {
45
+ console.error('Error fetching playlist:', error);
46
+ }
47
+ }
48
+
49
+ fetchPlaylist();
50
+ </script>
51
+ </body>
52
+ </html>