Author:
Hash:
Timestamp:
+969 -0 +/-10 browse
Kevin Schoon [me@kevinschoon.com]
6c70103e13ed54b74e2faf20f07fc7fa8257d2d6
Mon, 24 Mar 2025 13:11:11 +0000 (2 months ago)
1 | diff --git a/.gitignore b/.gitignore |
2 | new file mode 100644 |
3 | index 0000000..ea8c4bf |
4 | --- /dev/null |
5 | +++ b/.gitignore |
6 | @@ -0,0 +1 @@ |
7 | + /target |
8 | diff --git a/Cargo.lock b/Cargo.lock |
9 | new file mode 100644 |
10 | index 0000000..8d37510 |
11 | --- /dev/null |
12 | +++ b/Cargo.lock |
13 | @@ -0,0 +1,828 @@ |
14 | + # This file is automatically @generated by Cargo. |
15 | + # It is not intended for manual editing. |
16 | + version = 4 |
17 | + |
18 | + [[package]] |
19 | + name = "addr2line" |
20 | + version = "0.24.2" |
21 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
22 | + checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" |
23 | + dependencies = [ |
24 | + "gimli", |
25 | + ] |
26 | + |
27 | + [[package]] |
28 | + name = "adler2" |
29 | + version = "2.0.0" |
30 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
31 | + checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" |
32 | + |
33 | + [[package]] |
34 | + name = "aho-corasick" |
35 | + version = "1.1.3" |
36 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
37 | + checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" |
38 | + dependencies = [ |
39 | + "memchr", |
40 | + ] |
41 | + |
42 | + [[package]] |
43 | + name = "axum" |
44 | + version = "0.8.1" |
45 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
46 | + checksum = "6d6fd624c75e18b3b4c6b9caf42b1afe24437daaee904069137d8bab077be8b8" |
47 | + dependencies = [ |
48 | + "axum-core", |
49 | + "bytes", |
50 | + "form_urlencoded", |
51 | + "futures-util", |
52 | + "http", |
53 | + "http-body", |
54 | + "http-body-util", |
55 | + "hyper", |
56 | + "hyper-util", |
57 | + "itoa", |
58 | + "matchit", |
59 | + "memchr", |
60 | + "mime", |
61 | + "percent-encoding", |
62 | + "pin-project-lite", |
63 | + "rustversion", |
64 | + "serde", |
65 | + "serde_json", |
66 | + "serde_path_to_error", |
67 | + "serde_urlencoded", |
68 | + "sync_wrapper", |
69 | + "tokio", |
70 | + "tower", |
71 | + "tower-layer", |
72 | + "tower-service", |
73 | + "tracing", |
74 | + ] |
75 | + |
76 | + [[package]] |
77 | + name = "axum-core" |
78 | + version = "0.5.0" |
79 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
80 | + checksum = "df1362f362fd16024ae199c1970ce98f9661bf5ef94b9808fee734bc3698b733" |
81 | + dependencies = [ |
82 | + "bytes", |
83 | + "futures-util", |
84 | + "http", |
85 | + "http-body", |
86 | + "http-body-util", |
87 | + "mime", |
88 | + "pin-project-lite", |
89 | + "rustversion", |
90 | + "sync_wrapper", |
91 | + "tower-layer", |
92 | + "tower-service", |
93 | + "tracing", |
94 | + ] |
95 | + |
96 | + [[package]] |
97 | + name = "backtrace" |
98 | + version = "0.3.74" |
99 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
100 | + checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" |
101 | + dependencies = [ |
102 | + "addr2line", |
103 | + "cfg-if", |
104 | + "libc", |
105 | + "miniz_oxide", |
106 | + "object", |
107 | + "rustc-demangle", |
108 | + "windows-targets", |
109 | + ] |
110 | + |
111 | + [[package]] |
112 | + name = "bytes" |
113 | + version = "1.10.1" |
114 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
115 | + checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" |
116 | + |
117 | + [[package]] |
118 | + name = "cfg-if" |
119 | + version = "1.0.0" |
120 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
121 | + checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" |
122 | + |
123 | + [[package]] |
124 | + name = "darling" |
125 | + version = "0.20.10" |
126 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
127 | + checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" |
128 | + dependencies = [ |
129 | + "darling_core", |
130 | + "darling_macro", |
131 | + ] |
132 | + |
133 | + [[package]] |
134 | + name = "darling_core" |
135 | + version = "0.20.10" |
136 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
137 | + checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" |
138 | + dependencies = [ |
139 | + "fnv", |
140 | + "ident_case", |
141 | + "proc-macro2", |
142 | + "quote", |
143 | + "strsim", |
144 | + "syn", |
145 | + ] |
146 | + |
147 | + [[package]] |
148 | + name = "darling_macro" |
149 | + version = "0.20.10" |
150 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
151 | + checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" |
152 | + dependencies = [ |
153 | + "darling_core", |
154 | + "quote", |
155 | + "syn", |
156 | + ] |
157 | + |
158 | + [[package]] |
159 | + name = "derive_builder" |
160 | + version = "0.20.2" |
161 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
162 | + checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" |
163 | + dependencies = [ |
164 | + "derive_builder_macro", |
165 | + ] |
166 | + |
167 | + [[package]] |
168 | + name = "derive_builder_core" |
169 | + version = "0.20.2" |
170 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
171 | + checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" |
172 | + dependencies = [ |
173 | + "darling", |
174 | + "proc-macro2", |
175 | + "quote", |
176 | + "syn", |
177 | + ] |
178 | + |
179 | + [[package]] |
180 | + name = "derive_builder_macro" |
181 | + version = "0.20.2" |
182 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
183 | + checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" |
184 | + dependencies = [ |
185 | + "derive_builder_core", |
186 | + "syn", |
187 | + ] |
188 | + |
189 | + [[package]] |
190 | + name = "fnv" |
191 | + version = "1.0.7" |
192 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
193 | + checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" |
194 | + |
195 | + [[package]] |
196 | + name = "form_urlencoded" |
197 | + version = "1.2.1" |
198 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
199 | + checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" |
200 | + dependencies = [ |
201 | + "percent-encoding", |
202 | + ] |
203 | + |
204 | + [[package]] |
205 | + name = "futures-channel" |
206 | + version = "0.3.31" |
207 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
208 | + checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" |
209 | + dependencies = [ |
210 | + "futures-core", |
211 | + ] |
212 | + |
213 | + [[package]] |
214 | + name = "futures-core" |
215 | + version = "0.3.31" |
216 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
217 | + checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" |
218 | + |
219 | + [[package]] |
220 | + name = "futures-task" |
221 | + version = "0.3.31" |
222 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
223 | + checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" |
224 | + |
225 | + [[package]] |
226 | + name = "futures-util" |
227 | + version = "0.3.31" |
228 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
229 | + checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" |
230 | + dependencies = [ |
231 | + "futures-core", |
232 | + "futures-task", |
233 | + "pin-project-lite", |
234 | + "pin-utils", |
235 | + ] |
236 | + |
237 | + [[package]] |
238 | + name = "getset" |
239 | + version = "0.1.5" |
240 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
241 | + checksum = "f3586f256131df87204eb733da72e3d3eb4f343c639f4b7be279ac7c48baeafe" |
242 | + dependencies = [ |
243 | + "proc-macro-error2", |
244 | + "proc-macro2", |
245 | + "quote", |
246 | + "syn", |
247 | + ] |
248 | + |
249 | + [[package]] |
250 | + name = "gimli" |
251 | + version = "0.31.1" |
252 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
253 | + checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" |
254 | + |
255 | + [[package]] |
256 | + name = "heck" |
257 | + version = "0.5.0" |
258 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
259 | + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" |
260 | + |
261 | + [[package]] |
262 | + name = "http" |
263 | + version = "1.3.1" |
264 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
265 | + checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" |
266 | + dependencies = [ |
267 | + "bytes", |
268 | + "fnv", |
269 | + "itoa", |
270 | + ] |
271 | + |
272 | + [[package]] |
273 | + name = "http-body" |
274 | + version = "1.0.1" |
275 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
276 | + checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" |
277 | + dependencies = [ |
278 | + "bytes", |
279 | + "http", |
280 | + ] |
281 | + |
282 | + [[package]] |
283 | + name = "http-body-util" |
284 | + version = "0.1.3" |
285 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
286 | + checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" |
287 | + dependencies = [ |
288 | + "bytes", |
289 | + "futures-core", |
290 | + "http", |
291 | + "http-body", |
292 | + "pin-project-lite", |
293 | + ] |
294 | + |
295 | + [[package]] |
296 | + name = "httparse" |
297 | + version = "1.10.1" |
298 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
299 | + checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" |
300 | + |
301 | + [[package]] |
302 | + name = "httpdate" |
303 | + version = "1.0.3" |
304 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
305 | + checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" |
306 | + |
307 | + [[package]] |
308 | + name = "hyper" |
309 | + version = "1.6.0" |
310 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
311 | + checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" |
312 | + dependencies = [ |
313 | + "bytes", |
314 | + "futures-channel", |
315 | + "futures-util", |
316 | + "http", |
317 | + "http-body", |
318 | + "httparse", |
319 | + "httpdate", |
320 | + "itoa", |
321 | + "pin-project-lite", |
322 | + "smallvec", |
323 | + "tokio", |
324 | + ] |
325 | + |
326 | + [[package]] |
327 | + name = "hyper-util" |
328 | + version = "0.1.10" |
329 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
330 | + checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" |
331 | + dependencies = [ |
332 | + "bytes", |
333 | + "futures-util", |
334 | + "http", |
335 | + "http-body", |
336 | + "hyper", |
337 | + "pin-project-lite", |
338 | + "tokio", |
339 | + "tower-service", |
340 | + ] |
341 | + |
342 | + [[package]] |
343 | + name = "ident_case" |
344 | + version = "1.0.1" |
345 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
346 | + checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" |
347 | + |
348 | + [[package]] |
349 | + name = "itoa" |
350 | + version = "1.0.15" |
351 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
352 | + checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" |
353 | + |
354 | + [[package]] |
355 | + name = "libc" |
356 | + version = "0.2.171" |
357 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
358 | + checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" |
359 | + |
360 | + [[package]] |
361 | + name = "log" |
362 | + version = "0.4.26" |
363 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
364 | + checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" |
365 | + |
366 | + [[package]] |
367 | + name = "matchit" |
368 | + version = "0.8.4" |
369 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
370 | + checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" |
371 | + |
372 | + [[package]] |
373 | + name = "memchr" |
374 | + version = "2.7.4" |
375 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
376 | + checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" |
377 | + |
378 | + [[package]] |
379 | + name = "mime" |
380 | + version = "0.3.17" |
381 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
382 | + checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" |
383 | + |
384 | + [[package]] |
385 | + name = "miniz_oxide" |
386 | + version = "0.8.5" |
387 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
388 | + checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" |
389 | + dependencies = [ |
390 | + "adler2", |
391 | + ] |
392 | + |
393 | + [[package]] |
394 | + name = "mio" |
395 | + version = "1.0.3" |
396 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
397 | + checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" |
398 | + dependencies = [ |
399 | + "libc", |
400 | + "wasi", |
401 | + "windows-sys", |
402 | + ] |
403 | + |
404 | + [[package]] |
405 | + name = "object" |
406 | + version = "0.36.7" |
407 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
408 | + checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" |
409 | + dependencies = [ |
410 | + "memchr", |
411 | + ] |
412 | + |
413 | + [[package]] |
414 | + name = "oci-spec" |
415 | + version = "0.7.1" |
416 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
417 | + checksum = "da406e58efe2eb5986a6139626d611ce426e5324a824133d76367c765cf0b882" |
418 | + dependencies = [ |
419 | + "derive_builder", |
420 | + "getset", |
421 | + "regex", |
422 | + "serde", |
423 | + "serde_json", |
424 | + "strum", |
425 | + "strum_macros", |
426 | + "thiserror", |
427 | + ] |
428 | + |
429 | + [[package]] |
430 | + name = "once_cell" |
431 | + version = "1.21.1" |
432 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
433 | + checksum = "d75b0bedcc4fe52caa0e03d9f1151a323e4aa5e2d78ba3580400cd3c9e2bc4bc" |
434 | + |
435 | + [[package]] |
436 | + name = "papyri-axum" |
437 | + version = "0.1.0" |
438 | + dependencies = [ |
439 | + "axum", |
440 | + "oci-spec", |
441 | + ] |
442 | + |
443 | + [[package]] |
444 | + name = "papyri-common" |
445 | + version = "0.1.0" |
446 | + |
447 | + [[package]] |
448 | + name = "percent-encoding" |
449 | + version = "2.3.1" |
450 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
451 | + checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" |
452 | + |
453 | + [[package]] |
454 | + name = "pin-project-lite" |
455 | + version = "0.2.16" |
456 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
457 | + checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" |
458 | + |
459 | + [[package]] |
460 | + name = "pin-utils" |
461 | + version = "0.1.0" |
462 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
463 | + checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" |
464 | + |
465 | + [[package]] |
466 | + name = "proc-macro-error-attr2" |
467 | + version = "2.0.0" |
468 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
469 | + checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" |
470 | + dependencies = [ |
471 | + "proc-macro2", |
472 | + "quote", |
473 | + ] |
474 | + |
475 | + [[package]] |
476 | + name = "proc-macro-error2" |
477 | + version = "2.0.1" |
478 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
479 | + checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" |
480 | + dependencies = [ |
481 | + "proc-macro-error-attr2", |
482 | + "proc-macro2", |
483 | + "quote", |
484 | + "syn", |
485 | + ] |
486 | + |
487 | + [[package]] |
488 | + name = "proc-macro2" |
489 | + version = "1.0.94" |
490 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
491 | + checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" |
492 | + dependencies = [ |
493 | + "unicode-ident", |
494 | + ] |
495 | + |
496 | + [[package]] |
497 | + name = "quote" |
498 | + version = "1.0.40" |
499 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
500 | + checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" |
501 | + dependencies = [ |
502 | + "proc-macro2", |
503 | + ] |
504 | + |
505 | + [[package]] |
506 | + name = "regex" |
507 | + version = "1.11.1" |
508 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
509 | + checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" |
510 | + dependencies = [ |
511 | + "aho-corasick", |
512 | + "memchr", |
513 | + "regex-automata", |
514 | + "regex-syntax", |
515 | + ] |
516 | + |
517 | + [[package]] |
518 | + name = "regex-automata" |
519 | + version = "0.4.9" |
520 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
521 | + checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" |
522 | + dependencies = [ |
523 | + "aho-corasick", |
524 | + "memchr", |
525 | + "regex-syntax", |
526 | + ] |
527 | + |
528 | + [[package]] |
529 | + name = "regex-syntax" |
530 | + version = "0.8.5" |
531 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
532 | + checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" |
533 | + |
534 | + [[package]] |
535 | + name = "rustc-demangle" |
536 | + version = "0.1.24" |
537 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
538 | + checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" |
539 | + |
540 | + [[package]] |
541 | + name = "rustversion" |
542 | + version = "1.0.20" |
543 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
544 | + checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" |
545 | + |
546 | + [[package]] |
547 | + name = "ryu" |
548 | + version = "1.0.20" |
549 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
550 | + checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" |
551 | + |
552 | + [[package]] |
553 | + name = "serde" |
554 | + version = "1.0.219" |
555 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
556 | + checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" |
557 | + dependencies = [ |
558 | + "serde_derive", |
559 | + ] |
560 | + |
561 | + [[package]] |
562 | + name = "serde_derive" |
563 | + version = "1.0.219" |
564 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
565 | + checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" |
566 | + dependencies = [ |
567 | + "proc-macro2", |
568 | + "quote", |
569 | + "syn", |
570 | + ] |
571 | + |
572 | + [[package]] |
573 | + name = "serde_json" |
574 | + version = "1.0.140" |
575 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
576 | + checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" |
577 | + dependencies = [ |
578 | + "itoa", |
579 | + "memchr", |
580 | + "ryu", |
581 | + "serde", |
582 | + ] |
583 | + |
584 | + [[package]] |
585 | + name = "serde_path_to_error" |
586 | + version = "0.1.17" |
587 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
588 | + checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" |
589 | + dependencies = [ |
590 | + "itoa", |
591 | + "serde", |
592 | + ] |
593 | + |
594 | + [[package]] |
595 | + name = "serde_urlencoded" |
596 | + version = "0.7.1" |
597 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
598 | + checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" |
599 | + dependencies = [ |
600 | + "form_urlencoded", |
601 | + "itoa", |
602 | + "ryu", |
603 | + "serde", |
604 | + ] |
605 | + |
606 | + [[package]] |
607 | + name = "smallvec" |
608 | + version = "1.14.0" |
609 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
610 | + checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" |
611 | + |
612 | + [[package]] |
613 | + name = "socket2" |
614 | + version = "0.5.8" |
615 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
616 | + checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" |
617 | + dependencies = [ |
618 | + "libc", |
619 | + "windows-sys", |
620 | + ] |
621 | + |
622 | + [[package]] |
623 | + name = "strsim" |
624 | + version = "0.11.1" |
625 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
626 | + checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" |
627 | + |
628 | + [[package]] |
629 | + name = "strum" |
630 | + version = "0.26.3" |
631 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
632 | + checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" |
633 | + |
634 | + [[package]] |
635 | + name = "strum_macros" |
636 | + version = "0.26.4" |
637 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
638 | + checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" |
639 | + dependencies = [ |
640 | + "heck", |
641 | + "proc-macro2", |
642 | + "quote", |
643 | + "rustversion", |
644 | + "syn", |
645 | + ] |
646 | + |
647 | + [[package]] |
648 | + name = "syn" |
649 | + version = "2.0.100" |
650 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
651 | + checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" |
652 | + dependencies = [ |
653 | + "proc-macro2", |
654 | + "quote", |
655 | + "unicode-ident", |
656 | + ] |
657 | + |
658 | + [[package]] |
659 | + name = "sync_wrapper" |
660 | + version = "1.0.2" |
661 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
662 | + checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" |
663 | + |
664 | + [[package]] |
665 | + name = "thiserror" |
666 | + version = "2.0.12" |
667 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
668 | + checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" |
669 | + dependencies = [ |
670 | + "thiserror-impl", |
671 | + ] |
672 | + |
673 | + [[package]] |
674 | + name = "thiserror-impl" |
675 | + version = "2.0.12" |
676 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
677 | + checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" |
678 | + dependencies = [ |
679 | + "proc-macro2", |
680 | + "quote", |
681 | + "syn", |
682 | + ] |
683 | + |
684 | + [[package]] |
685 | + name = "tokio" |
686 | + version = "1.44.1" |
687 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
688 | + checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a" |
689 | + dependencies = [ |
690 | + "backtrace", |
691 | + "libc", |
692 | + "mio", |
693 | + "pin-project-lite", |
694 | + "socket2", |
695 | + "tokio-macros", |
696 | + "windows-sys", |
697 | + ] |
698 | + |
699 | + [[package]] |
700 | + name = "tokio-macros" |
701 | + version = "2.5.0" |
702 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
703 | + checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" |
704 | + dependencies = [ |
705 | + "proc-macro2", |
706 | + "quote", |
707 | + "syn", |
708 | + ] |
709 | + |
710 | + [[package]] |
711 | + name = "tower" |
712 | + version = "0.5.2" |
713 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
714 | + checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" |
715 | + dependencies = [ |
716 | + "futures-core", |
717 | + "futures-util", |
718 | + "pin-project-lite", |
719 | + "sync_wrapper", |
720 | + "tokio", |
721 | + "tower-layer", |
722 | + "tower-service", |
723 | + "tracing", |
724 | + ] |
725 | + |
726 | + [[package]] |
727 | + name = "tower-layer" |
728 | + version = "0.3.3" |
729 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
730 | + checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" |
731 | + |
732 | + [[package]] |
733 | + name = "tower-service" |
734 | + version = "0.3.3" |
735 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
736 | + checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" |
737 | + |
738 | + [[package]] |
739 | + name = "tracing" |
740 | + version = "0.1.41" |
741 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
742 | + checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" |
743 | + dependencies = [ |
744 | + "log", |
745 | + "pin-project-lite", |
746 | + "tracing-core", |
747 | + ] |
748 | + |
749 | + [[package]] |
750 | + name = "tracing-core" |
751 | + version = "0.1.33" |
752 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
753 | + checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" |
754 | + dependencies = [ |
755 | + "once_cell", |
756 | + ] |
757 | + |
758 | + [[package]] |
759 | + name = "unicode-ident" |
760 | + version = "1.0.18" |
761 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
762 | + checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" |
763 | + |
764 | + [[package]] |
765 | + name = "wasi" |
766 | + version = "0.11.0+wasi-snapshot-preview1" |
767 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
768 | + checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" |
769 | + |
770 | + [[package]] |
771 | + name = "windows-sys" |
772 | + version = "0.52.0" |
773 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
774 | + checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" |
775 | + dependencies = [ |
776 | + "windows-targets", |
777 | + ] |
778 | + |
779 | + [[package]] |
780 | + name = "windows-targets" |
781 | + version = "0.52.6" |
782 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
783 | + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" |
784 | + dependencies = [ |
785 | + "windows_aarch64_gnullvm", |
786 | + "windows_aarch64_msvc", |
787 | + "windows_i686_gnu", |
788 | + "windows_i686_gnullvm", |
789 | + "windows_i686_msvc", |
790 | + "windows_x86_64_gnu", |
791 | + "windows_x86_64_gnullvm", |
792 | + "windows_x86_64_msvc", |
793 | + ] |
794 | + |
795 | + [[package]] |
796 | + name = "windows_aarch64_gnullvm" |
797 | + version = "0.52.6" |
798 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
799 | + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" |
800 | + |
801 | + [[package]] |
802 | + name = "windows_aarch64_msvc" |
803 | + version = "0.52.6" |
804 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
805 | + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" |
806 | + |
807 | + [[package]] |
808 | + name = "windows_i686_gnu" |
809 | + version = "0.52.6" |
810 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
811 | + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" |
812 | + |
813 | + [[package]] |
814 | + name = "windows_i686_gnullvm" |
815 | + version = "0.52.6" |
816 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
817 | + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" |
818 | + |
819 | + [[package]] |
820 | + name = "windows_i686_msvc" |
821 | + version = "0.52.6" |
822 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
823 | + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" |
824 | + |
825 | + [[package]] |
826 | + name = "windows_x86_64_gnu" |
827 | + version = "0.52.6" |
828 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
829 | + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" |
830 | + |
831 | + [[package]] |
832 | + name = "windows_x86_64_gnullvm" |
833 | + version = "0.52.6" |
834 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
835 | + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" |
836 | + |
837 | + [[package]] |
838 | + name = "windows_x86_64_msvc" |
839 | + version = "0.52.6" |
840 | + source = "registry+https://github.com/rust-lang/crates.io-index" |
841 | + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" |
842 | diff --git a/Cargo.toml b/Cargo.toml |
843 | new file mode 100644 |
844 | index 0000000..05a59c6 |
845 | --- /dev/null |
846 | +++ b/Cargo.toml |
847 | @@ -0,0 +1,26 @@ |
848 | + [workspace] |
849 | + resolver = "2" |
850 | + members = [ |
851 | + "papyri-common", |
852 | + "papyri-axum", |
853 | + ] |
854 | + |
855 | + # [workspace.dependencies] |
856 | + # async-trait = "0.1.86" |
857 | + # bytes = "1.10.0" |
858 | + # clap = { version = "4.5.20", features = ["derive"] } |
859 | + # clap_complete = { version = "4.4.10" } |
860 | + # serde = { version = "1.0", features = ["derive"] } |
861 | + # git2 = "0.19.0" |
862 | + # rand = "0.8.5" |
863 | + # thiserror = "2.0.11" |
864 | + # tracing = { version = "0.1.41", features=["log"] } |
865 | + # toml = "0.8.20" |
866 | + # futures = "0.3.31" |
867 | + # futures-util = "0.3.31" |
868 | + # sqlx = { version = "0.8.3", features = [ "runtime-tokio-rustls", "sqlite", "macros", "time" ] } |
869 | + # tracing-subscriber = { version = "0.3.19", features = ["env-filter"] } |
870 | + # |
871 | + # tokio = { version = "1.43.0", features = ["full"] } |
872 | + # tokio-util = { version = "0.7.13", features = ["io", "compat"] } |
873 | + # tokio-stream = "0.1.17" |
874 | diff --git a/README.md b/README.md |
875 | new file mode 100644 |
876 | index 0000000..98ba0f3 |
877 | --- /dev/null |
878 | +++ b/README.md |
879 | @@ -0,0 +1,5 @@ |
880 | + # Papyri |
881 | + |
882 | + Papyri is a [OCI Distribution Spec](https://github.com/opencontainers/distribution-spec) |
883 | + compliant container registry that is usable as a standalone application or |
884 | + consumable as a Rust library. |
885 | diff --git a/papyri-axum/Cargo.toml b/papyri-axum/Cargo.toml |
886 | new file mode 100644 |
887 | index 0000000..4b83733 |
888 | --- /dev/null |
889 | +++ b/papyri-axum/Cargo.toml |
890 | @@ -0,0 +1,8 @@ |
891 | + [package] |
892 | + name = "papyri-axum" |
893 | + version = "0.1.0" |
894 | + edition = "2024" |
895 | + |
896 | + [dependencies] |
897 | + axum = "0.8.1" |
898 | + oci-spec = "0.7.1" |
899 | diff --git a/papyri-axum/src/lib.rs b/papyri-axum/src/lib.rs |
900 | new file mode 100644 |
901 | index 0000000..6a664ab |
902 | --- /dev/null |
903 | +++ b/papyri-axum/src/lib.rs |
904 | @@ -0,0 +1 @@ |
905 | + pub mod routes; |
906 | diff --git a/papyri-axum/src/routes.rs b/papyri-axum/src/routes.rs |
907 | new file mode 100644 |
908 | index 0000000..e5509a8 |
909 | --- /dev/null |
910 | +++ b/papyri-axum/src/routes.rs |
911 | @@ -0,0 +1,91 @@ |
912 | + use axum::Json; |
913 | + use axum::extract::{MatchedPath, Request}; |
914 | + use axum::{Router, routing::get}; |
915 | + use oci_spec::image::{ImageManifest, ImageIndexBuilder}; |
916 | + use serde_json::json; |
917 | + use tower_http::trace::TraceLayer; |
918 | + use tracing::info_span; |
919 | + use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; |
920 | + |
921 | + pub async fn handler_index(req: Request) -> Json<serde_json::Value> { |
922 | + req.headers().iter().for_each(|h| { |
923 | + let header_value = h.1.to_str().ok(); |
924 | + tracing::info!(key = h.0.as_str(), value = header_value); |
925 | + }); |
926 | + Json(json!({})) |
927 | + } |
928 | + |
929 | + pub async fn handler_manifest_index() -> Json<serde_json::Value> { |
930 | + } |
931 | + |
932 | + // async fn serve() { |
933 | + // let app = Router::new() |
934 | + // .route("/", get(|| async { "Hello, World!" })) |
935 | + // .route("/v2", get(handler_index)) |
936 | + // .route("/v2/", get(handler_index)) |
937 | + // .layer( |
938 | + // TraceLayer::new_for_http().make_span_with(|request: &Request<_>| { |
939 | + // // Log the matched route's path (with placeholders not filled in). |
940 | + // // Use request.uri() or OriginalUri if you want the real path. |
941 | + // let matched_path = request |
942 | + // .extensions() |
943 | + // .get::<MatchedPath>() |
944 | + // .map(MatchedPath::as_str); |
945 | + // |
946 | + // let actual_path = request.uri().path(); |
947 | + // |
948 | + // info_span!( |
949 | + // "http_request", |
950 | + // method = ?request.method(), |
951 | + // matched_path, |
952 | + // actual_path, |
953 | + // some_other_field = tracing::field::Empty, |
954 | + // ) |
955 | + // }), // .on_request(|_request: &Request<_>, _span: &Span| { |
956 | + // // // You can use `_span.record("some_other_field", value)` in one of these |
957 | + // // // closures to attach a value to the initially empty field in the info_span |
958 | + // // // created above. |
959 | + // // }) |
960 | + // // .on_response(|_response: &Response, _latency: Duration, _span: &Span| { |
961 | + // // // ... |
962 | + // // }) |
963 | + // // .on_body_chunk(|_chunk: &Bytes, _latency: Duration, _span: &Span| { |
964 | + // // // ... |
965 | + // // }) |
966 | + // // .on_eos( |
967 | + // // |_trailers: Option<&HeaderMap>, _stream_duration: Duration, _span: &Span| { |
968 | + // // // ... |
969 | + // // }, |
970 | + // // ) |
971 | + // // .on_failure( |
972 | + // // |_error: ServerErrorsFailureClass, _latency: Duration, _span: &Span| { |
973 | + // // // ... |
974 | + // // }, |
975 | + // // ), |
976 | + // ); |
977 | + // |
978 | + // // run our app with hyper, listening globally on port 3000 |
979 | + // tracing::info!("Listening @ 0.0.0.0:3000"); |
980 | + // let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); |
981 | + // axum::serve(listener, app).await.unwrap(); |
982 | + // } |
983 | + // |
984 | + // #[tokio::main] |
985 | + // async fn main() { |
986 | + // tracing_subscriber::registry() |
987 | + // .with( |
988 | + // tracing_subscriber::EnvFilter::try_from_default_env().unwrap_or_else(|_| { |
989 | + // // axum logs rejections from built-in extractors with the `axum::rejection` |
990 | + // // target, at `TRACE` level. `axum::rejection=trace` enables showing those events |
991 | + // format!( |
992 | + // "{}=debug,tower_http=debug,axum::rejection=trace", |
993 | + // env!("CARGO_CRATE_NAME") |
994 | + // ) |
995 | + // .into() |
996 | + // }), |
997 | + // ) |
998 | + // .with(tracing_subscriber::fmt::layer()) |
999 | + // .init(); |
1000 | + // serve().await; |
1001 | + // } |
1002 | + |
1003 | diff --git a/papyri-axum/src/storage.rs b/papyri-axum/src/storage.rs |
1004 | new file mode 100644 |
1005 | index 0000000..e69de29 |
1006 | --- /dev/null |
1007 | +++ b/papyri-axum/src/storage.rs |
1008 | diff --git a/papyri-common/Cargo.toml b/papyri-common/Cargo.toml |
1009 | new file mode 100644 |
1010 | index 0000000..6e65a6c |
1011 | --- /dev/null |
1012 | +++ b/papyri-common/Cargo.toml |
1013 | @@ -0,0 +1,6 @@ |
1014 | + [package] |
1015 | + name = "papyri-common" |
1016 | + version = "0.1.0" |
1017 | + edition = "2024" |
1018 | + |
1019 | + [dependencies] |
1020 | diff --git a/papyri-common/src/main.rs b/papyri-common/src/main.rs |
1021 | new file mode 100644 |
1022 | index 0000000..e7a11a9 |
1023 | --- /dev/null |
1024 | +++ b/papyri-common/src/main.rs |
1025 | @@ -0,0 +1,3 @@ |
1026 | + fn main() { |
1027 | + println!("Hello, world!"); |
1028 | + } |